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

for循环中使用pandas.get_dummies无法修改DataFrame,求解决方案

解决Pandas get_dummies在循环中无法更新原DataFrame的问题

问题的核心在于:pd.get_dummies() 不会直接修改原DataFrame,而是返回一个全新的DataFrame对象。你的两种循环方式都没有把新生成的对象重新赋值给原来的data_train和data_val变量,所以原变量自然不会有变化。

快速解决方案

方案1:直接手动赋值(最简单直观)

既然get_dummies没有inplace参数,直接对每个DataFrame单独处理并重新赋值是最清晰的方式:

data_train = pd.get_dummies(data_train, columns=categorical_fields)
data_val = pd.get_dummies(data_val, columns=categorical_fields)

方案2:用列表推导式批量处理并解包

如果想减少重复代码,可以用列表推导式生成处理后的DataFrame列表,再直接赋值给原变量:

data_train, data_val = [pd.get_dummies(df, columns=categorical_fields) for df in [data_train, data_val]]

方案3:用字典管理后更新

如果后续还有更多DataFrame需要处理,用字典来管理会更灵活:

# 把需要处理的DataFrame存入字典
df_dict = {"train": data_train, "val": data_val}

# 循环处理每个DataFrame
for name in df_dict:
    df_dict[name] = pd.get_dummies(df_dict[name], columns=categorical_fields)

# 把处理后的结果重新赋值给原变量
data_train = df_dict["train"]
data_val = df_dict["val"]

为什么你的原代码无效?

  • 第一种循环:for df in data_cleaner中的df只是原DataFrame的临时引用,当你执行df = pd.get_dummies(...)时,只是把df指向了新的对象,完全不会影响原来的data_train和data_val。
  • 第二种循环:你修改了data_cleaner[i]的值,但data_train本身是独立变量,它并没有和data_cleaner列表绑定——列表里存的只是原对象的引用,当你把data_cleaner[i]赋值为新对象后,data_train依然指向旧的未处理对象。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:48:42