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

如何通过for循环函数批量重命名pandas DataFrame列名

Pandas批量重命名列名实现方案

问题说明

你当前持有一个约400列的pandas DataFrame,原始列名遵循如下命名规则:

p900_70
p901_70
p902_70
p903_70
...

目标是移除所有列名末尾的两位字符70,得到如下格式的新列名:

p900_
p901_
p902_
p903_
...

你已经编写了可以生成新列名的生成器函数,但不清楚如何结合重命名逻辑完成批量操作,现有函数代码如下:

def equalize70(x):
  for i in x.columns.values:
    result = i[:-2]
    yield result

可行实现方法

方法1:直接复用现有生成器(最简洁)

pandas的DataFrame支持直接给columns属性赋值列名列表完成全量重命名,你写的生成器已经可以正确输出所有新列名,只需要把生成结果转为列表直接赋值即可,不需要额外写循环逻辑:

# 假设你的DataFrame变量名为df
df.columns = list(equalize70(df))

这个写法执行效率很高,哪怕是千级列的场景也能瞬间完成。

方法2:显式for循环配合rename方法(更易扩展)

如果你希望保留显式循环逻辑、方便后续加特殊判断(比如跳过不符合规则的列),可以把函数改成返回列名映射字典的形式,再调用pandas内置的rename方法:

def equalize70(x):
    name_mapping = {}
    for old_col in x.columns:
        # 可以在这里加判断逻辑,比如只处理末尾是_70的列,避免误改其他列
        if old_col.endswith("_70"):
            new_col = old_col[:-2]
            name_mapping[old_col] = new_col
    return name_mapping

# 调用重命名
df = df.rename(columns=equalize70(df))

小提示:如果存在列名长度不足2位、或者末尾不是_70的特殊列,一定要加上面示例里的endswith判断,避免[:-2]切片把不符合规则的列名切错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 22:06:12