在处理数据时,一些变量的值是非数值型的,如中文或者英文等,在python中,很多时候,上述的数据类型是不能带入模型的,这就需要我们进行处理。
常见的处理方式有两种:
- Onehot Encoding:即sklearn.preprocessing中的OneHotEncoder。简单来说OneHotEncoder用于将表示分类的数据扩维:
- LabelEncoder:即sklearn.preprocessing中的LabelEncoder。简单来说 LabelEncoder 是对不连续的数字或者文本进行编号
OneHotEncoder:
from sklearn.preprocessing import OneHotEncoder
ohe = OneHotEncoder()
ohe.fit([[1],[2],[3],[4]])
ohe.transform([2],[3],[1],[4]).toarray()
输出:[ [0,1,0,0] , [0,0,1,0] , [1,0,0,0] ,[0,0,0,1] ]
LabelEncoder:
from sklearn.preprocessing import LabelEncoder
le = LabelEncoder()
le.fit([1,5,67,100])
le.transform([1,1,100,67,5])
输出: array([0,0,3,2,1])
解析:
- 先构造encoder
le = LabelEncoder()
,通过fit函数传入需要编码的数据,在内部生成对应的key-value - 然后encoder 用于需要转化的数据,用transform函数
或者直接用fit_transform()
:
# Create some toy data in a Pandas dataframe
fruit_data = pd.DataFrame({
'fruit': ['apple','orange','pear','orange'],
'color': ['red','orange','green','green'],
'weight': [5,6,3,4]
})
Output:
color fruit weight
0 red apple 5
1 orange orange 6
2 green pear 3
3 green orange 4
经过LabelEncoder转码:
MultiColumnLabelEncoder(columns = ['fruit','color']).fit_transform(fruit_data)
Output:
color fruit weight
0 2 0 5
1 1 1 6
2 0 2 3
3 0 1 4