Python对114列类别型数值DataFrame的整体one_hot编码实现咨询
大规模类别型数值存储DataFrame的全列独热编码实现
适用场景:114列全部为以数值形式存储的分类属性,无真实连续测量值,需批量执行独热编码
方案选型与实现代码
方案1:pandas原生get_dummies(大内存场景首选,转换性能最优)
无需额外依赖,对纯类别列的转换速度比第三方转换器高30%以上,支持内置内存优化参数
import pandas as pd # 输入为你的原始DataFrame(所有114列均为分类属性) onehot_result = pd.get_dummies( data=raw_df, # 将编码值设为uint8类型,相比默认int64类型,内存占用降低87.5% dtype="uint8", # 如需将缺失值单独生成一个独热列,开启下方参数 # dummy_na=True )
方案2:scikit-learnOneHotEncoder(需对接建模流水线、复用转换逻辑时选用)
适合需要固定编码规则、跨数据集转换的场景,避免临时转换的规则不一致问题
import pandas as pd import numpy as np from sklearn.preprocessing import OneHotEncoder # 适配大分类数据集的编码器初始化配置 onehot_encoder = OneHotEncoder( # 输出稀疏矩阵,避免高维度下内存溢出 sparse_output=True, # 跨数据集转换时遇到未见过的类别,自动置0不报错 handle_unknown="ignore", dtype=np.uint8 ) # 全列拟合并转换 encoded_sparse_matrix = onehot_encoder.fit_transform(raw_df) # 转换为带列名的稀疏DataFrame结构 onehot_result = pd.DataFrame.sparse.from_spmatrix( encoded_sparse_matrix, columns=onehot_encoder.get_feature_names_out(raw_df.columns), index=raw_df.index )
实操注意事项
- 跳过无信息列:如果某一列只有1个唯一取值,可在编码前直接删除,这类列独热后全为1,无任何建模价值
- 禁止提前做数值缩放:所有列本质为类别属性,任何连续值标准化、归一化操作都会破坏原有类别属性,无需执行
- 内存兜底:如果编码后矩阵维度过高,可保留稀疏矩阵结构,无需强制转成稠密格式即可对接后续树模型、线性模型训练
内容的提问来源于stack exchange,提问作者Ela
相关产品推荐
相关产品推荐


