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

调试pandas筛选DataFrame时出现KeyError: 'Filter'问题求助

问题描述

我需要实现的功能:让用户输入目标天体名称或多个筛选器名称,获取对应观测数据。我的CSV数据包含Object、HJD 24...、Filter、Magnitude列,记录了SU_Hor、RZ_Lyr等天体的多组观测记录。

编写的Python代码如下:

def searchByFilter():
    filter = input('Enter filter to show data \n')
    df = pd.read_csv('Python_2ndLab.csv')
    print(df.loc[df['Filter'] == filter, :])


print('Enter 1 to search by object name')
print('Enter 2 to search by filter')

src = (input('Enter here: '))

if src == '1':
    searchByObject()
elif src == '2':
    searchByFilter()
else:
    print('Sorry, invalid input')

运行时输入“2”选择按筛选器搜索,接着输入筛选器名称“B”,未得到对应数据反而触发KeyError: 'Filter'错误,完整错误栈如下:

Traceback (most recent call last):
  File "C:\Users\Acer\AppData\Local\Programs\Python\Python310\lib\site-packages\pandas\core\indexes\base.py", line 3803, in get_loc
    return self._engine.get_loc(casted_key)
  File "pandas\_libs\index.pyx", line 138, in pandas._libs.index.IndexEngine.get_loc
  File "pandas\_libs\index.pyx", line 165, in pandas._libs.index.IndexEngine.get_loc
  File "pandas\_libs\hashtable_class_helper.pxi", line 5745, in pandas._libs.hashtable.PyObjectHashTable.get_item
  File "pandas\_libs\hashtable_class_helper.pxi", line 5753, in pandas._libs.hashtable.PyObjectHashTable.get_item
KeyError: 'Filter'

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "C:\Users\Acer\PycharmProjects\2nd Lab\main.py", line 78, in <module>
    searchByFilter()
  File "C:\Users\Acer\PycharmProjects\2nd Lab\main.py", line 64, in searchByFilter
    print(df.loc[df['Filter'] == filter, :])
  File "C:\Users\Acer\AppData\Local\Programs\Python\Python310\lib\site-packages\pandas\core\frame.py", line 3805, in __getitem__
    indexer = self.columns.get_loc(key)
  File "C:\Users\Acer\AppData\Local\Programs\Python\Python310\lib\site-packages\pandas\core\indexes\base.py", line 3805, in get_loc
    raise KeyError(key) from err
KeyError: 'Filter'
调试步骤与解决方案

这个错误的核心是pandas读取CSV后找不到名为Filter的列,按以下步骤排查修复:

  1. 验证CSV列名准确性

    • 直接打开Python_2ndLab.csv检查第一行列名,确认是否存在拼写错误(比如小写filter)、前后空格(比如 Filter或Filter )等问题
    • 在代码中新增列名打印语句,直观确认读取到的列名:
      def searchByFilter():
          df = pd.read_csv('Python_2ndLab.csv')
          print("CSV列名列表:", df.columns.tolist())  # 新增该行
          filter = input('Enter filter to show data \n')
          print(df.loc[df['Filter'] == filter, :])
      
  2. 处理CSV读取格式问题

    • 如果列名存在前后空格,读取时添加skipinitialspace=True参数自动去除:
      df = pd.read_csv('Python_2ndLab.csv', skipinitialspace=True)
      
    • 如果CSV使用非逗号分隔符(比如制表符),指定对应分隔符参数:
      df = pd.read_csv('Python_2ndLab.csv', sep='\t')
      
  3. 确认文件路径正确性

    • 确保Python_2ndLab.csv和脚本在同一目录,或使用绝对路径读取避免路径错误:
      df = pd.read_csv(r'C:\Users\Acer\PycharmProjects\2nd Lab\Python_2ndLab.csv')
      
  4. 扩展支持多筛选器输入

    • 针对需求中“可输入多个筛选器”的要求,修改代码支持逗号分隔的多筛选器匹配:
      def searchByFilter():
          df = pd.read_csv('Python_2ndLab.csv', skipinitialspace=True)
          filters_input = input('Enter filters (comma-separated, e.g. B,V) \n').strip().split(',')
          filters = [f.strip() for f in filters_input]
          print(df.loc[df['Filter'].isin(filters), :])
      

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 18:45:33