本文共 1379 字,大约阅读时间需要 4 分钟。
OneHotEncoder既可以对字符串型变量或数值型变量进行编码(旧版可能只能对数值型变量进行编码)
import pandas as pdimport numpy as npfrom sklearn.preprocessing import OneHotEncoderfrom sklearn.preprocessing import LabelEncoderfrom sklearn.preprocessing import LabelBinarizerfrom sklearn.preprocessing import MultiLabelBinarizercolumns = ['性别','学历','工资']data = pd.DataFrame([['男','女','女','男'],['本科','硕士','硕士','本科'],[6000,8800,8000,12000]])data = data.T #对二维数组进行转置data.columns = columnsprint(data)onehot_edu = OneHotEncoder(sparse=False).fit_transform(data[['学历']]) onehot_edu_sal = OneHotEncoder(sparse=False).fit_transform(data[['性别','学历']]) print(onehot_edu)print(onehot_edu_sal)OneHotEncoder 的输入必须是 2-D array,因此不能是data[‘学历’],它的类型是series,是个一维数组,要加两层中括号:data[[‘学历’]]
即将离散型的数据转换成 0到 n − 1 之间的数。
LabelEncoder从名字可以看出它是用来对标签值进行编码的,所以默认输入的数组是一维的,如果输入的数组不是一维的,它会尝试将其转化为一维的:
LabelEncoder().fit_transform(data[['性别']])如果不能转化为一维的,则会报错:
LabelEncoder().fit_transform(data[['性别','学历']])
对非数值型标签进行二值化:
lb = LabelBinarizer() #构建一个转换对象Y = lb.fit_transform(data['学历'])re_label = lb.inverse_transform(Y)print(Y)print(re_label)
可以对任何类型数据进行编码:
encoded = pd.get_dummies(data[['学历','性别','工资']])encoded注意这个方法中有个参数sparse,默认值是sparse=False,如果设置为True后,后续有些处理可能会出错,需要注意!
转载地址:http://karti.baihongyu.com/