pandas比较DataFrame两个数值列筛选数据时触发KeyError: 'Today'如何解决?
KeyError: 'Today'报错原因及解决方案
核心报错原因
KeyError本质是pandas在数据集的列名中找不到你指定的'Today'字段,常见的触发场景有三类:
- 列名带多余的前后空格:导入数据时如果原始文件的表头字段前后有空格,会被pandas直接读取为列名的一部分,导致实际列名是
' Today '/'Today '而非你认为的'Today',这是这类问题最常见的诱因 - 表头读取配置错误:读取数据集时没有指定正确的表头参数,把第一行数据当成了列名,或者跳过了表头行,导致实际列名中没有
'Today' - 数据集被意外修改:执行筛选代码前,你对
petrole_price做过赋值、切片、合并等修改操作,覆盖了原始数据集的列结构,导致'Today'列被删除
解决步骤
- 先打印当前数据集的实际列名,确认问题根源:
print(petrole_price.columns.tolist())
- 根据打印结果对应处理:
- 如果是列名带空格的情况,先批量去除所有列名的前后空白字符:
petrole_price.columns = petrole_price.columns.str.strip()
处理完成后再运行你原来的筛选代码即可正常执行:
petrole_price = petrole_price[petrole_price['Today'] > petrole_price['Yesterday']]
- 如果是表头读取错误,重新导入数据集时指定正确的表头参数,以csv文件为例:
import pandas as pd petrole_price = pd.read_csv("你的数据集文件路径.csv", header=0)
其中header=0表示将文件的第一行作为列名读取。
- 如果是数据集被意外修改,回溯筛选代码之前的逻辑,修正对
petrole_price的错误操作后再运行筛选逻辑即可。
按照你的样例数据,最终筛选得到的结果会保留India、UAE、Russia三行记录。
内容的提问来源于stack exchange,提问作者swarna
相关产品推荐
相关产品推荐

