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

如何向Pandas pivot_table传递列表中的多索引参数以避免KeyError

错误原因

  1. 第一种写法中r'"3","4"'是单个完整字符串,pandas会尝试寻找列名完全等于'3','4'的字段,不存在就抛出KeyError。
  2. 第二种将第三个元素改为["3","4"]后仍然报错,是因为循环里你给i额外套了一层[],当i本身是列表时,实际传入index参数的值为[["3","4"]],相当于把整个列表当成了单个列名,自然匹配不到。

解决方案

方案1(更规范,推荐)

统一将rows里的所有元素都存为「列名列表」格式,单个列名也包裹成单元素列表,循环时直接传入即可:

import pandas as pd
import numpy as np

# 统一所有index参数为列表格式
rows = [
    ["1"],
    ["2"],
    ["3", "4"]
]

for idx_cols in rows:
    table = pd.pivot_table(
        df.fillna(0),
        index=idx_cols, # 直接传列名列表,无需额外套[]
        values=["X", "Y"],
        aggfunc=[np.sum],
        fill_value=0,
        margins=True, # 注意这里应该传布尔值True,不是字符串"True"
        margins_name="Tot."
    )
    # 后续处理table的逻辑

方案2(适配原有字符串格式输入)

如果你无法修改rows的原始输入格式,仍然是字符串形式的r'"3","4"',可以在循环内先做字符串拆分处理:

rows = ["1", "2", r'"3","4"']

for i in rows:
    # 拆分字符串、清理引号,生成列名列表
    idx_cols = [col.strip('"\'') for col in i.split(',')]
    table = pd.pivot_table(
        df.fillna(0),
        index=idx_cols,
        values=["X", "Y"],
        aggfunc=[np.sum],
        fill_value=0,
        margins=True,
        margins_name="Tot."
    )

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 09:09:06