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

Pandas循环内触发get_loc报错,相同代码循环外执行正常

问题分析与解决办法

这个报错是pandas的KeyError,核心原因是循环里的某个列名在survey或CSsurvey这两个DataFrame里找不到。虽然单独执行某一行没问题,但循环过程中肯定碰到了缺失的列名,下面是具体排查方向和解决办法:

  • 检查列名的隐形差异
    很大概率是你手动写的sports列表里的列名,和csv实际的列名有看不见的差异——比如末尾多了空格、中间混了全角空格,或者复制时带了换行符。
    解决:直接打印两个表格的列名列表,复制正确的列名替换sports里的内容:

    print("survey列名:", survey.columns.tolist())
    print("CSsurvey列名:", CSsurvey.columns.tolist())
    
  • 确认读取csv的参数一致
    上周运行时可能给pd.read_csv加了特殊参数(比如skiprows=1跳过首行、header=1指定第二行当列名),这周没加导致列名读取错误。
    解决:核对上周的代码,确保pd.read_csv的参数完全相同,比如是否指定了encoding、skiprows等。

  • 提前校验列的存在性
    可能某个列只在其中一个表格里存在,你单独测试时刚好选了两个表格都有的列,循环到缺失的列就报错了。可以在循环里加判断,提前排查:

    sport = []
    for p in sports:
        if p not in survey.columns:
            print(f"survey里找不到列:{p}")
            continue
        if p not in CSsurvey.columns:
            print(f"CSsurvey里找不到列:{p}")
            continue
        item = survey[p].sum()
        CSitem = CSsurvey[p].sum()
        total = item + CSitem
        sport.append(total)
    
  • 排查文件是否损坏或编码问题
    哪怕你说数据完全相同,也可能文件被意外修改(比如编码变更),导致读出来的列名乱码。
    解决:尝试指定编码读取,比如pd.read_csv(folderin + 'survey.csv', encoding='utf-8'),或者恢复上周的文件版本测试。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 18:00:01