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

Pandas多列名替换问题:代码需运行两次的原因及简化方案

问题分析与解决方案

为什么要运行两次才生效?

你这段代码的核心问题是循环遍历的是初始列名列表,而非实时更新后的列名:

  • 第一个for循环启动时,df.columns就被固定成了初始的列名集合,后续每次用inplace=True修改列名后,循环里的col还是原来的旧列名。
  • 比如原列名是"Deaths - ABC (deaths)",第一次rename把它改成"ABC",但接下来执行df.rename(columns={col: col.replace(' (deaths)', '')})时,col还是旧的"Deaths - ABC (deaths)",此时DataFrame里已经没有这个列名了,所以这次替换根本不会生效。
  • 第二次运行代码时,遍历的是第一次修改后的列名,剩下的替换规则才能匹配到新列名,完成后续修改。

简化后的代码方案

不需要循环多次调用rename,直接用Pandas的str方法链式处理所有替换逻辑,一次性更新列名,一次运行就能完成所有操作:

# 链式调用完成所有列名清理
df.columns = (df.columns
              .str.replace('Deaths - ', '')
              .str.replace(' - Sex: Both - Age: All Ages (Number)', '')
              .str.replace(' \(deaths\)', '')  # 括号是正则特殊字符,需转义
              .str.replace(' ', '_')
              .str.lower()
             )

如果偏好函数式写法,也可以先定义列名处理函数,再批量应用:

def clean_col_name(col):
    col = col.replace('Deaths - ', '')
    col = col.replace(' - Sex: Both - Age: All Ages (Number)', '')
    col = col.replace(' (deaths)', '')
    col = col.replace(' ', '_')
    return col.lower()

df.columns = [clean_col_name(col) for col in df.columns]

这两种方法都是先对每个列名完成所有修改操作,再一次性赋值给df.columns,彻底避免了原代码中循环与实时列名不同步的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 13:20:35