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

pandas读取Excel执行pingouin.anova触发KeyError报错排查

问题根因

触发KeyError: 'Cognitive Reattribution'的核心原因是pandas读取anovacogret.xlsx生成的DataFrame中,不存在和代码传入名称完全一致的列。同一份代码在其他表格可正常运行,说明逻辑本身无问题,当前文件的列名和预期存在偏差,常见诱因包括:

  • 列名首尾带有不可见空白字符(末尾空格、制表符等,手动编辑Excel表头时极易出现该问题)
  • 列名中间的空格数量不匹配(比如实际是两个空格,代码里写了一个)
  • Excel文件前存在空行/备注行,pandas默认将第一行识别为表头,导致真实列名整体偏移
  • 列名存在大小写、全角半角字符的细微差异
快速排查方法

读取文件后先打印所有列名的原始表示,即可直接定位列名不匹配的具体原因:

import pandas as pd
df = pd.read_excel('anovacogret.xlsx')
# 输出列名的原始字符串形式,可直接看到隐藏的空白、特殊字符
print([repr(col) for col in df.columns])

比如输出中如果出现'Cognitive Reattribution ',就说明列名末尾多了一个多余空格,和代码中传入的名称无法匹配。

解决方案

根据排查结果选择对应处理方式即可:

  • 通用适配方案(无需手动修改Excel文件,可规避绝大多数列名空白问题)
    读取文件后统一清洗列名格式,去除首尾空白、规整中间的连续空格:
    import pandas as pd
    import pingouin as pg
    
    df = pd.read_excel('anovacogret.xlsx')
    # 批量清洗列名
    df.columns = df.columns.str.strip().str.replace(r'\s+', ' ', regex=True)
    
    aov = pg.anova(data=df, dv='Cognitive Reattribution', between='Type', detailed=True)
    aov
    
  • 表头偏移处理
    如果排查发现真实表头不在Excel第一行,给pd.read_excel传入header参数指定表头所在行即可(注意pandas索引从0开始计数,比如真实表头在Excel第2行,参数设为header=1):
    # 示例:真实表头位于Excel第2行
    df = pd.read_excel('anovacogret.xlsx', header=1)
    # 后续同样执行列名清洗、ANOVA计算即可
    
  • 列名拼写/格式不匹配
    直接将代码中dv参数传入的列名,替换为排查步骤中打印出的真实列名即可。

补充:如果清洗后仍报错,可按同样逻辑检查Type分组列是否存在相同的列名不匹配问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 03:45:47