如何组合使用OneHotEncoder与LabelEncoder对不同类型特征编码
编码需求实现方案
数据集特征分类
- 二分类文本数据:示例值为
'yes'、'no',使用LabelEncoder编码 - 多分类名义数据:包含
feature_1(取值:父亲/母亲/其他)、feature_2(取值:家庭/学校声誉/课程偏好/其他)两个特征,唯一需要使用OneHotEncoder编码的特征类 - 二值数值数据:取值为
0、1,使用LabelEncoder编码 - 多值数值数据:示例取值为
1、2、3、4、5,使用LabelEncoder编码
调整后代码
首先提前导入依赖库:
import pandas as pd from sklearn.preprocessing import LabelEncoder
代码实现:
# 自定义需要做OneHot编码的名义类特征列名,可根据实际数据集列名增删 nominal_features = ['feature_1', 'feature_2'] def encoder(df): le = LabelEncoder() for c in df.columns: # 跳过需要单独做OneHot编码的名义特征 if c in nominal_features: continue # 对文本类型特征做Label编码 if df.dtypes[c] == object: df[c] = le.fit_transform(df[c].astype(str)) # 对指定名义特征做OneHot编码,输出为整数格式 df = pd.get_dummies(df, columns=nominal_features, dtype=int) return df # 调用函数处理数据集 stud = encoder(stud) stud.head()
注:这里直接用pandas内置的
get_dummies实现OneHot编码,不需要额外做特征拼接操作,生成的新列会自动以「原特征名_取值」的格式命名,可读性更高。如果需要和sklearn管线兼容,也可以替换为OneHotEncoder实现。
内容的提问来源于stack exchange,提问作者Lorenzo Bussotti
相关产品推荐
相关产品推荐

