You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

房价预测任务中:如何将Sklearn OneHotEncoder编码结果转换为标准Pandas DataFrame?

解决OneHotEncoder输出格式不规范的Pandas DataFrame问题

嘿,我懂你现在的困扰——用OneHotEncoder处理后得到的DataFrame显示的是(0, 3) 1.0这种稀疏矩阵格式,完全不是我们熟悉的规整表格样式对吧?这是因为OneHotEncoder默认返回稀疏矩阵(Sparse Matrix),直接转成DataFrame时会保留这种存储结构,下面给你两种简单靠谱的解决办法:

方法一:修改OneHotEncoder参数,返回密集数组

只需要在初始化编码器时加上sparse=False参数,让它直接输出密集的numpy数组,转成DataFrame就是正常的列结构了。另外我们还可以给编码后的列加上有意义的名称,方便后续分析:

from sklearn.preprocessing import OneHotEncoder
import pandas as pd

# 初始化编码器,设置sparse=False输出密集数组
encoder = OneHotEncoder(sparse=False)
# 拟合并转换目标特征
encoded_array = encoder.fit_transform(categorical_df[['MSZoning']])
# 转换成规范的DataFrame,同时添加清晰的列名
encoded_df = pd.DataFrame(encoded_array, 
                          index=categorical_df.index,
                          columns=encoder.get_feature_names_out(['MSZoning']))
# 查看结果
encoded_df.head()

这样输出的DataFrame就会是每个类别对应一列、值为0或1的规整格式了。

方法二:用Pandas内置的get_dummies快速实现

如果你更习惯Pandas的工具链,pd.get_dummies()可以一步到位完成独热编码,直接返回格式规范的DataFrame,连列名都自动处理好了:

encoded_df = pd.get_dummies(categorical_df[['MSZoning']], prefix='MSZoning')
encoded_df.head()

这个方法不需要额外导入sklearn组件,代码更简洁,适合快速做数据预处理;如果后续要和sklearn的流水线(Pipeline)配合使用,那优先选第一种方法就好。

补充说明:两种方法的编码效果完全一致,你可以根据自己的项目场景灵活选择。

内容的提问来源于stack exchange,提问作者new2Ubuntu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.27 13:27:33