数据预处理之非数值型数据处理

诸如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)
Snip20180902_21.png

2. 使用map函数

pandas中, Series有map()函数,可以用它来实现少量的映射

# create mapping rule
mapping_size = {'S':1, 'M':2, 'L':3}

# mapping
df['size'] = df['size'].map(mapping_size)
Snip20180902_23.png

3. factorizing 因子化

factorize函数把相同字符串映射为同一数字

pd.factorize(df.gender)
Snip20180902_27.png

结果返回一个元祖,发现第一个数组跟上图的gender_female列一致。我试着又添加了一种性别,再次调用后:

Snip20180902_28.png

新性别被映射为2 ,说明映射后的值域是从0开始依次递增的


关于独热编码的具体介绍,大家可以看 OneHotEncoder独热编码和 LabelEncoder标签编码.

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容