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

Pandas如何单独重命名DataFrame中重复的同名/空列头

Pandas 重复列名单独修改与空列名向前填充方案

问题原因

df.rename()方法是按列名的值做匹配替换的,只要列名的值和传入字典的key相等,无论列在什么位置都会被统一修改。当存在多个同名列(包括列名为NaN的未命名列)时,就会出现一次修改所有同名列的情况,无法实现按位置单独修改。
之前编写的for循环未生效有两个核心问题:

  • 依然使用rename做值匹配替换,绕不开同值批量修改的逻辑
  • df.rename()默认返回新对象,不修改原DataFrame,执行结果未重新赋值给df

实现方案

所有需要按位置修改列名的场景,不要用rename,直接操作df.columns对象即可——df.columns是按列的位置顺序存储的,每个位置的列名独立,不会因为值重复触发批量修改。
针对需要的「空列名向前填充最近的非空列名,无前置非空列名时保留NaN」的需求,不需要手写循环,直接用pandas内置的向前填充方法ffill()就能实现,自动适配任意列数、任意列名取值的场景,不需要提前预知列信息。

完整示例代码

import pandas as pd
import numpy as np

# 构造示例DataFrame
df = pd.DataFrame(
    data=[[1,2,3,4,5,6,7,8], [9,10,11,12,13,14,15,16]],
    columns=[np.nan, np.nan, 'a', np.nan, np.nan, 'b', np.nan, np.nan]
)

# 对列名做向前填充,直接赋值给df.columns完成修改
df.columns = pd.Series(df.columns).ffill()

执行后列名输出为:

Index([nan, nan, 'a', 'a', 'a', 'b', 'b', 'b'], dtype='object')

完全匹配预期的最终效果。

单独修改指定位置列名的方法

如果需要单独修改某一个位置的重复列名,直接按索引修改列名列表即可,比如修改索引为1(第二列)的列名为word:

# 将列名转为可修改的列表
col_list = df.columns.tolist()
# 按位置修改指定列名
col_list[1] = 'word'
# 赋值回df.columns完成修改
df.columns = col_list

执行后只会修改第二列的列名,不会影响其他值为NaN的列。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 12:01:15