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

Python面板数据设置索引报错:指定列存在却提示不存在

问题描述

执行命令df.set_index(['id', 'datas'], inplace=True)时,反复收到KeyError:"None of ['id', 'datas'] are in the columns",但肉眼确认这两列存在于DataFrame中。完整报错信息如下:

---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)
<ipython-input-4-219574cda450> in <module>
      1 # Configurando o painel
----> 2 df.set_index(['id', 'datas'], inplace=True)
      3 
      4 # Realizando a regressão POLS
      5 X_pols = df[['perc_qtd_neg_lei', 'ampl_log_0', 'distperc_vwap_inicio_lei', 'segunda', 'terca', 'quarta', 'sexta']]

~\anaconda3\lib\site-packages\pandas\core\frame.py in set_index(self, keys, drop, append, inplace, verify_integrity)
   4549 
   4550         if missing:
-> 4551             raise KeyError(f"None of {missing} are in the columns")
   4552 
   4553         if inplace:

KeyError: "None of ['id', 'datas'] are in the columns"
原因分析
  • 列名存在空格或隐藏字符:肉眼看到的id/datas,实际列名可能带有前后空格(比如 id、datas )或不可见的特殊字符(如制表符、换行符),导致代码中的列名与实际列名不匹配。
  • 前期操作修改了DataFrame:执行set_index前的代码可能误删了这两列,或者使用inplace=True的操作(如drop、rename)改变了列的存在状态。
  • 大小写不匹配:实际列名可能是大小写不同的形式(比如ID、Datas),而代码中用的是全小写的id、datas。
解决方法
  • 验证列名的精确值:执行print(df.columns.tolist())查看所有列的真实名称,直接复制输出中的正确列名替换代码里的id和datas;如果是空格问题,执行df.columns = df.columns.str.strip()批量去除所有列名的前后空格。
  • 回溯代码流程:检查set_index之前的所有代码,确认没有删除列的操作;或者在操作前先备份DataFrame:df_backup = df.copy(),对副本进行操作避免原数据被意外修改。
  • 统一列名大小写:如果是大小写问题,要么修改代码中的列名与实际一致,要么执行df.columns = df.columns.str.lower()将所有列名转为小写(或str.upper()转为大写),再执行set_index。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 19:43:32