我们获取到的数据并不是所有的特征都可以用的,用时候我们需要对特征进行计算,得出新的特征,然后替换掉 用来不用的特征, 这个时候需要用替换操作。比较常用的是replace函数
将金牌数为0的替换为无

  1. df['金牌数'].replace(0,'无',inplace=True)

将金牌数中的0和无替换成nan和none

  1. df.replace(['无',0],[np.nan,'None'],inplace = True) #传入列表

二分类型替换

有时候会对一些数值型的变量做替换,比如我们有一列是游戏的售价,游戏有各种价格,也有很多游戏是不收费的,我们想知道收费的和不收费的游戏分别有多少,我们就需要将所有售价大于0的归类为付费游戏,所有售价等于零的归类为免费游戏

  1. store['FreePaidTag'] = ["Free" if i ==0 else "Paid" for i in store.Price]
  • 在这里面使用了一个行内的条件语句,用if语句做判断售价是否为0,然后用for循环遍历售价这列中的每行值,进行替换操作

分类型变量替换

对于多分类型数据,比如客户的信用评级,学生的等级这类的数据,可以使用map函数进行快速的替换

  1. for data in [data_train, data_test_a]:
  2. data['grade'] = data['grade'].map({'A':1,'B':2,'C':3,'D':4,'E':5,'F':6,'G':7})
  • 在map函数中用字典实现替换值之间的一一对应

独热编码

使用独热编码在处理多分类型数据中非常常用,独热编码将离散型特征的每一种取值都看成一种状态,构建出一个对角矩阵,且是方阵。每一个行向量就代表了我们的一个离散型变量

  1. # 类型数在2之上,又不是高维稀疏的,且纯分类特征
  2. for data in [data_train, data_test_a]:
  3. data = pd.get_dummies(data, columns=['subGrade', 'homeOwnership',
  4. 'verificationStatus', 'purpose', 'regionCode'], drop_first=True)
  • 在pandas中庸get_dummies来对变量进行独热编码

用其他列的值进行替换

  1. data['出院诊断'].loc[data['出院诊断']=='错误'] = data[data['出院诊断']=='错误']['入院诊断']
  • 这里将出院诊断这列中值为错误的,替换为了入院诊断的相对应的值,使用了向量化的做法,避免写过多的循环

可以用正则表达

  1. data['出院诊断'].loc[data['出院诊断'].str.contains('\d\d\d',regex=True)] = '错误'
  • 这里将出院诊断这列中值为数字的替换为错误

上面两者结合

  1. data['出院诊断'].loc[data['出院诊断'].str.contains('\d\d\d',regex=True)data['出院诊断']=='错误'] = data[data['出院诊断']=='错误']['入院诊断']
  • 将出院诊断这列中值为数字的替换为了入院诊断这列中相对应的值

有时候需要替换筛选后的值,在pandas的筛选一般使用的是loc[],但是这样会创建一个副本,后面的replace(,,inplace=true)也只是在副本上进行了替换,解决办法如下

  1. data.update(data.loc[(data['XM'].str.contains('毛$',regex=True) == True) & (data['NL'] < 1)].replace('毛毛$', '', regex=True))
  1. data.loc[(data['XM'].str.contains('小$',regex=True) == True) & (data['NL'] < 1),['XM','NL']] = data.loc[(data['XM'].str.contains('小$',regex=True) == True) & (data['NL'] < 1),['XM','NL']].replace('小$',"",regex=True)