在数据集中,会有一些分类字段,比如衣服的大小(X,XL,M),衣服的颜色(RED,GREEN),在进行训练的时候,我们肯定要让category变为nummerical表达形式。
对于有大小区分的category,直接map就行了。如下:
df = pd.DataFrame([
['green', 'M', 10.1, 'class1'],
['red', 'L', 13.5, 'class2'],
['blue', 'XL', 15.3, 'class1']])
df.columns = ['color', 'size', 'prize', 'class label']
size_mapping = {
'XL': 3,
'L': 2,
'M': 1}
df['size'] = df['size'].map(size_mapping)
对于颜色这种无法区分大小的数据,我们就使用one-hot编码,pandas自带方法帮我们完成编码。
>>> df = pd.DataFrame({'A': ['a', 'b', 'a'], 'B': ['b', 'a', 'c'],
... 'C': [1, 2, 3]})
>>> pd.get_dummies(df, prefix=['col1', 'col2'])
C col1_a col1_b col2_a col2_b col2_c
0 1 1 0 0 1 0
1 2 0 1 1 0 0
2 3 1 0 0 0 1
从上面的结果可以看到,热编码是将我们一个分类字段变为多个分类字段,1代表是这个分类,0代表不是这个分类。
最后说明一下:
get_dummies()不会改变原来的df,这个方法返回的是改变后的df,所以如果你想得到改变后的df,就df = pd.get_dummies()