如何通过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
相关产品推荐
相关产品推荐

