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

使用Pandas重命名Excel列时遇TypeError: Must pass list-like as `names`错误求助

Pandas重命名Excel透视表列报错的解决思路

问题描述

使用Pandas处理Excel数据,生成透视表后尝试重命名列时出现错误,错误出现在代码中# Rename Columns对应的代码段。

用户代码

import pandas as pd

# 加载Excel文件到DataFrame
df = pd.read_excel("Marginal CPA data - NOV.xlsx")

# 删除最后一行
df = df[:-1]

# 筛选"Campaign Type (Search ACQ) - ONC"列为"NonBrand"的行
df = df[df["Campaign Type (Search ACQ) - ONC"] == "NonBrand"]

# 创建透视表
pivot_table = pd.pivot_table(df, values=["Media Cost", "CAFE Approvals"], 
                              index=["Campaign Type (Search ACQ) - ONC", "Product (ACQ Search) - ONC", "Day"], 
                              columns=["CDJ"], aggfunc="sum")

# 移除轴标签
pivot_table = pivot_table.rename_axis(None, axis=1)
pivot_table = pivot_table.rename_axis(None, axis=0)

# 复制透视表到新DataFrame
df_pivot = pivot_table.copy()

# 重命名列(报错位置)
df_pivot = df_pivot.rename(columns={('Media Cost', 'CPA'): 'CPA Spend', ('Media Cost', 'Non CPA'): 'CDJ Spend'})
df_pivot = df_pivot.rename(columns={('CAFE Approvals', 'CPA'): 'CPA Approvals', ('CAFE Approvals', 'Non CPA'): 'CDJ Approvals'})

解决思路

1. 先确认多级列的真实结构

透视表生成的是多级列(MultiIndex),重命名失败大概率是因为指定的键和实际列名不匹配(比如空格、大小写、拼写差异)。先打印列信息确认:

print(df_pivot.columns)

输出会显示所有列的元组结构,对比你写的('Media Cost', 'CPA')等键是否完全一致。

2. 合并重命名操作(避免多次调用的潜在问题)

把两次rename合并成一次,用一个完整的字典映射,减少出错概率:

rename_map = {
    ('Media Cost', 'CPA'): 'CPA Spend',
    ('Media Cost', 'Non CPA'): 'CDJ Spend',
    ('CAFE Approvals', 'CPA'): 'CPA Approvals',
    ('CAFE Approvals', 'Non CPA'): 'CDJ Approvals'
}
df_pivot = df_pivot.rename(columns=rename_map)

3. 扁平化多级列(简化后续操作)

如果不需要保留多级列结构,可以直接将多级列合并为单级列,之后用普通列名重命名更直观:

# 将多级列用下划线连接成单级列名
df_pivot.columns = ['_'.join(col) for col in df_pivot.columns]
# 重命名
df_pivot = df_pivot.rename(columns={
    'Media Cost_CPA': 'CPA Spend',
    'Media Cost_Non CPA': 'CDJ Spend',
    'CAFE Approvals_CPA': 'CPA Approvals',
    'CAFE Approvals_Non CPA': 'CDJ Approvals'
})

4. 验证透视表的列维度值

确认原始数据中CDJ列的唯一值确实是CPA和Non CPA,如果存在其他值,那你写的重命名键就会找不到对应列:

print(df['CDJ'].unique())

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 04:05:54