这里我们假设有这么一种情况,一个字段里的变量值,需要把某几个变量值修改为同一个值,然后其他几个变量值修改为另外一个,那么我们有什么简单的办法可以完成呢?这边,我推荐一个字典映射的办法!
我们还是用一下泰坦尼克号的数据集,大家可以在下面的链接去下载数据哈。
Titanic数据集下载:
https://www.kaggle.com/c/titanic/data
# 导入相关库
import pandas as pd
import numpy as np
from pandas import Series,DataFrame
import re
# 导入泰坦尼的数据集
data_train = pd.read_csv("./data/titanic/Train.csv")
# 提取其中几列
data = data_train.loc[:,['PassengerId','Name']]
# 提取称谓
data['Title'] = data['Name'].map(lambda x: re.compile(", (.*?)\.").findall(x)[0])
data.Title.value_counts()
就好像我刚刚所说的,需要把黄色框框里的变量值修改掉,而且是按照我们的想法,比如capt
和Dr
合为一体,统一叫officer
。
# 定义一个空字典来收集映射关系
title_Dict = {}
title_Dict.update(dict.fromkeys(['Capt', 'Col', 'Major', 'Dr', 'Rev'], 'Officer'))
title_Dict.update(dict.fromkeys(['Don', 'Sir', 'the Countess', 'Dona', 'Lady'], 'Royalty'))
title_Dict.update(dict.fromkeys(['Mme', 'Ms', 'Mrs'], 'Mrs'))
title_Dict.update(dict.fromkeys(['Mlle', 'Miss'], 'Miss'))
title_Dict.update(dict.fromkeys(['Mr'], 'Mr'))
title_Dict.update(dict.fromkeys(['Master','Jonkheer'], 'Master'))
title_Dict
我们把映射关系用字典来存储,到时候直接可以拿来用。
data['Title'] = data['Title'].map(title_Dict)
data.Title.value_counts()
对于上面的内容,大家有什么疑问可以留言哈~