文章目录
- labelencoder
- OneHotEncoder
- get_dummies
- LabelBinarizer
labelencoder
LabelEncoder
将不连续的数字or文本进行编号
python">import numpy as np
import pandas as pd
data = pd.DataFrame({"学号":[1001,1002,1003,1004],
"性别":["男","女","女","男"],
"学历":["本科","硕士","专科","本科"]})
data
python">学号 性别 学历
0 1001 男 本科
1 1002 女 硕士
2 1003 女 专科
3 1004 男 本科
python">## 选择object类型的变量
lis = list(data.select_dtypes(include='object').columns)
lis
['性别', '学历']
- 使用
LabelEncoder
进行编码,每个变量单独进行多变量的编码
python">from sklearn.preprocessing import LabelEncoder
le = LabelEncoder()
for m in lis:
data[m] = le.fit_transform(data[m])
data
python"> 学号 性别 学历
0 1001 1 1
1 1002 0 2
2 1003 0 0
3 1004 1 1
OneHotEncoder
OneHotEncoder
对表示分类的数字进行编码
输入的应该是表示类别的数字,如果输入文本,会报错的。
python">from sklearn.preprocessing import OneHotEncoder
OHE = OneHotEncoder()
OHE.fit(data)
python">data3 = le.fit_transform(data["性别"])
OHE.fit(data3.reshape(-1,1))
OHE.transform(data3.reshape(-1,1)).toarray()
python">array([[0., 1.],
[1., 0.],
[1., 0.],
[0., 1.]])
get_dummies
get_dummies
的效果和LabelEncoder
一致
python">pd.get_dummies(data)
学号 性别 学历
0 1001 1 1
1 1002 0 2
2 1003 0 0
3 1004 1 1
LabelBinarizer
对因变量y不能用OneHotEncoder
,要用LabelBinarizer
。
python">from sklearn.preprocessing import LabelBinarizer
lab = LabelEncoder()
lab.fit_transform(data['学历'])
python">array([1, 2, 0, 1], dtype=int64)