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

Python pandas merge后列名带单引号 执行rename重命名操作报错如何解决

问题原因

  1. 你看到的带单引号的列名本质不是字符串,是多级列索引(MultiIndex),每一个列名都是元组格式。你把元组转成字符串作为rename的匹配key,和实际列名类型不匹配,自然找不到对应列,重命名完全不生效。出现该情况大概率是merge的其中一个输入DataFrame之前做过groupby聚合操作,agg聚合时默认生成了多级列索引,merge时直接保留了该结构,打印时pandas把元组转为字符串展示才会看到单引号。
  2. 代码存在语法错误:使用inplace=True参数时,rename方法的返回值为None,你把返回值赋值给data_renamed后调用dtype会直接报错,因为None对象没有该属性。

解决方法

步骤1:验证列索引类型

先执行以下代码确认是否为多级索引:

print(type(data.columns))
print(data.columns)

如果输出包含<class 'pandas.core.indexes.multi.MultiIndex'>即可确认问题根因。

步骤2:正确执行重命名

直接用元组作为匹配key即可,根据使用习惯选择以下两种写法之一:

写法1:不使用inplace,直接接收新DataFrame

data_renamed = data.rename(columns={
    ('MonthCompletionXWSWeighting', 'sum'): "MonthCompletionXWSWeighting",
    ('Actual / Plan', ''): "Actual / Plan",
    ('Month', ''): "Month",
    ('#', ''): "#"
})
# 验证重命名结果
print(data_renamed.columns)

写法2:使用inplace,不做变量赋值

data.rename(columns={
    ('MonthCompletionXWSWeighting', 'sum'): "MonthCompletionXWSWeighting",
    ('Actual / Plan', ''): "Actual / Plan",
    ('Month', ''): "Month",
    ('#', ''): "#"
}, inplace=True)
# 验证重命名结果
print(data.columns)

可选:批量拍平多级列索引

如果需要处理的列很多,不想逐个写映射规则,可以批量将多级索引转为单级:

# 规则:第二层索引非空则拼接,为空直接取第一层
data.columns = [f"{col[0]}_{col[1]}" if col[1] else col[0] for col in data.columns]

# 如果只需要保留第一层索引,写法更简单
data.columns = data.columns.get_level_values(0)

内容的提问来源于stack exchange,提问作者v-jh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 21:27:02