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

使用for循环结合get_dummies转换分类变量遇空DataFrame问题求助

问题出在哪?

你的代码有两个关键错误:

  • 循环里的i是列名的字符串,i[:]依然是字符串,不是数据集里的对应列。pd.get_dummies拿字符串当输入,自然生成空DataFrame。
  • 每次循环都直接给df_new赋值,之前处理的结果全被覆盖了,而且原数据里的数值特征也完全没保留。
怎么改?

给你两种可行的写法:

写法一:用循环逐个处理分类列

先把原数据里的数值特征保留下来,再遍历分类列做编码合并:

# 先把数值特征复制到新数据集,避免丢数据
df_new = df_balanced.select_dtypes(exclude=['object']).copy()

# 遍历前n-1列(和你原代码逻辑一致)
for col in df_balanced.columns[:-1]:
    # 判断是不是分类列(object类型)
    if df_balanced[col].dtype == 'object':
        # 对当前列做独热编码,prefix加列名避免重复,drop_first减少冗余
        dummy_data = pd.get_dummies(df_balanced[col], prefix=col, drop_first=True)
        # 把编码后的列合并到新数据集里
        df_new = pd.concat([df_new, dummy_data], axis=1)

写法二:不用循环,直接一键处理(更简洁)

pd.get_dummies本身可以自动识别分类列,不用手动循环:

# 直接对前n-1列做独热编码,自动处理所有object类型列,drop_first去重
df_new = pd.get_dummies(df_balanced.iloc[:, :-1], drop_first=True, dtype=int)

这里iloc[:, :-1]对应你原代码里的columns[:-1],也就是排除最后一列;drop_first=True和你原逻辑一致,dtype=int是让编码结果用整数0/1,可选。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 05:06:02