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

Pandas中for循环遍历多DataFrame转列名为小写蛇形命名不生效

问题原因
  • 字符串是Python的不可变对象,你代码里col.replace(' ', '_').lower()只是生成了处理后的新字符串,既没有保存结果,也没有把结果赋值回DataFrame的列属性,相当于操作完就丢弃了结果,自然不会对原数据产生任何修改。
  • 遍历df.columns拿到的单个col是列名字符串的临时副本,就算你给这个临时变量重新赋值,也不会改动原DataFrame存储的列名索引。
  • 嵌套循环逐个处理单个列名的写法本身不符合pandas的批量操作逻辑,效率低还容易出赋值不生效的问题。
解决方法

不用写嵌套循环,直接利用pandas的字符串向量化操作批量处理列名,一次性赋值给df.columns即可生效,代码如下:

df_list = [df_1, df_2, df_3, df_4, df_5]

for df in df_list:
    # 批量完成空格替换、转小写操作,直接赋值回列属性
    df.columns = df.columns.str.replace(' ', '_').str.lower()

如果你想保留显式循环的写法(不推荐,仅作逻辑参考),需要先把所有处理后的列名收集成新列表,再整体赋值给df.columns,单独修改遍历出的临时列名变量永远不会生效:

df_list = [df_1, df_2, df_3, df_4, df_5]

for df in df_list:
    processed_columns = []
    for col in df.columns:
        new_col = col.replace(' ', '_').lower()
        processed_columns.append(new_col)
    # 整体替换列名才会真正修改原DataFrame
    df.columns = processed_columns

补充说明:因为DataFrame是可变对象,循环中拿到的df是原DataFrame的引用,上述代码运行后,你最初定义的df_1到df_5的列名会直接被修改,不需要额外把修改后的DataFrame重新存回列表。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 09:54:30