诸如sklearn库,只能对数值型数据进行训练分析,我们要把非数值型数据转换成数值型,在这里介绍几种方法,和大家一起学习。
1. one-hot encode(独热编码)
适用于属性值域较小的特征,如 gender = {‘male’, ‘female’} ,它将添加2个新的列:female,male(之所以是2,因为sex特征只有两种取值。),若是女性,则两个新列取(1,0),反之为(0,1)。类似于寄存器引脚的有效电平,或者网络编程中select函数的fd_set参数变量
以这个例子:
dummy_df = pd.get_dummies(df.gender)
dummy_df = dummy_df.rename(columns= lambda x: 'gender_'+str(x) )
df = pd.concat([df, dummy_df], axis=1)
2. 使用map函数
pandas中, Series有map()
函数,可以用它来实现少量的映射
# create mapping rule
mapping_size = {'S':1, 'M':2, 'L':3}
# mapping
df['size'] = df['size'].map(mapping_size)
3. factorizing 因子化
factorize函数把相同字符串映射为同一数字
pd.factorize(df.gender)
结果返回一个元祖,发现第一个数组跟上图的gender_female列一致。我试着又添加了一种性别,再次调用后:
新性别被映射为2 ,说明映射后的值域是从0开始依次递增的
关于独热编码的具体介绍,大家可以看 OneHotEncoder独热编码和 LabelEncoder标签编码.