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

函数内循环处理DataFrame列生成哑变量,原DataFrame未更新求助

问题原因

你写的函数之所以没修改原DataFrame,核心是Python的变量引用机制:

  • 函数接收的df是外部DataFrame的引用,但当执行df = pd.concat([df, temp_dum], axis=1)时,局部变量df被重新绑定到了pd.concat生成的新DataFrame对象上,和外部传入的原df彻底断开了关联。
  • 后续对这个局部df的修改(比如drop)都只作用在新对象上,原DataFrame完全没被改动。
两种解决办法

方法1:让函数返回修改后的DataFrame,外部重新赋值

修改函数,最后返回处理后的df,调用时覆盖原变量:

def cols_to_dummies(df, cols: list):
    for c in cols:
        temp_dum = pd.get_dummies(df[str(c)])
        df = pd.concat([df, temp_dum], axis=1)
        df.drop(str(c), axis=1, inplace=True)
    return df

调用方式:

cols = ['column1', 'column2']
df = cols_to_dummies(df, cols)  # 用返回的新df覆盖原变量

方法2:一次性生成所有哑变量(更简洁高效)

没必要循环处理每一列,pd.get_dummies支持直接传入列列表,一次性生成所有指定列的哑变量,代码更简洁:

def cols_to_dummies(df, cols: list):
    # 生成指定列的哑变量,给每个列的哑变量加上前缀区分
    dummies = pd.get_dummies(df[cols], prefix=cols)
    # 合并原df(移除指定列)和哑变量
    return df.drop(cols, axis=1).join(dummies)

调用方式和方法1一样:

cols = ['column1', 'column2']
df = cols_to_dummies(df, cols)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 00:25:20