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

使用Pandas get_dummies维度异常:如何保持特征原维度?

解决方法

你遇到的问题根源是pd.get_dummies生成的编码列变成了二维形状,这多半是因为原始分类列里的元素不是单一标量值(比如存了列表、元组这类可迭代对象),导致编码后每个单元格是数组而非单个0/1值。要实现独热编码且保持特征为一维(形状(60,)),按下面的步骤操作:

1. 先清洗原始分类列,确保每个单元格是单一值

如果原始列里有多值元素(比如Gender列出现["Female", "Male"]这类内容),得先把它处理成单个值,根据实际需求调整:

  • 若列内容是逗号分隔的字符串,拆分后取指定值:
# 示例:拆分后取第一个值,可根据需求修改索引
df["Gender"] = df["Gender"].str.split(",").str[0]
  • 若列元素是列表类型,直接提取单个元素:
df["Gender"] = df["Gender"].apply(lambda x: x[0] if isinstance(x, list) else x)

2. 重新执行独热编码

清洗完成后再运行pd.get_dummies,生成的编码列就会是一维的0/1数组(形状(60,)):

ohe_features = ["Gender", "Married", "Self_Employed"]
num_features = ["Dependents"]

df = pd.get_dummies(df, columns=ohe_features, dtype=int)

此时检查列的形状,就能看到每个编码列都是(60,),符合要求。

3. 备选方案:使用sklearn的OneHotEncoder

要是你习惯用scikit-learn工具链,也可以用OneHotEncoder实现,同样要确保原始特征是一维的:

from sklearn.preprocessing import OneHotEncoder
import pandas as pd

ohe = OneHotEncoder(sparse_output=False, dtype=int)
encoded_features = ohe.fit_transform(df[ohe_features])

# 将编码结果转为DataFrame并合并到原数据
encoded_df = pd.DataFrame(encoded_features, columns=ohe.get_feature_names_out(ohe_features))
df = pd.concat([df[num_features], encoded_df], axis=1)

这种方式生成的编码列同样是一维的。


可复现示例验证:
假设原始数据为(修正格式后):

Dependents,Gender,Married,Self_Employed
0,Female,Yes,No

完成清洗(若需要)和pd.get_dummies后,生成的Gender_Female列形状为(1,),符合一维要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 00:30:09