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
相关产品推荐
相关产品推荐

