所涉及到的几种 sklearn 的二值化编码函数:OneHotEncoder(), LabelEncoder(), LabelBinarizer(), 及pandas.get_dummies()
一、构造数据集:
import pandas as pd
from sklearn.preprocessing import OneHotEncoder
from sklearn.preprocessing import LabelEncoder
from sklearn.preprocessing import LabelBinarizer
pd.set_option('display.width',300)
pd.set_option('display.max_columns',300)
testdata = pd.DataFrame({'pet': ['cat', 'dog', 'dog', 'fish'],'age': [4 , 6, 3, 3],'salary':[4, 5, 1, 1]})
二、观察数据:
这里我们把 pet、age、salary 都看做类别特征,所不同的是 age 和 salary 都是数值型,而 pet 是字符串型。我们的目的很简单: 把他们全都二值化,进行 one-hot 编码。
三、代码实现
1、对字符串类型特征 pet 做二值化处理:
方法总共是有两种:
第一种:LabelEncoder() + OneHotEncoder()
pet = OneHotEncoder(sparse=False).fit_transform(LabelEncoder().fit_transform(testdata['pet']).reshape(-1,1))
pet = pd.DataFrame(pet,columns=['pet_cat','pet_dog','pet_fish'])
第二:直接调用 LabelBinarizer(),用于数字和字符串都是可以的
pet_binarlizer = LabelBinarizer().fit_transform(testdata.pet)
pet = pd.DataFrame(pet_binarlizer,columns=['pet_cat','pet_dog','pet_fish'])
输出结果为:
2、对数字类型特征 age,salary 做二值化处理:
直接用 OneHotEncoder() 函数
age_and_salary = OneHotEncoder(sparse= False).fit_transform(testdata[['age',"salary"]])
age_and_salary = pd.DataFrame(age_and_salary,columns=['age_3','age_4','age_6','salary_1','salary_4','salary_5'])
结果为:
3、 pandas 的concat() 连接所有数据
print(pd.concat((testdata,pet,age_and_salary),axis=1))
结果为:
4、总上,调用 pandas 库 中 get_dummies() 方法
print(pd.get_dummies(testdata,columns=testdata.columns))
结果为: