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

如何在Pandas DataFrame中保留指定日期后的行?解决KeyError报错

解决Pandas DataFrame按日期过滤行的KeyError问题

问题原因

你当前的drop()用法有误:drop()方法需要传入行索引(axis=0)或列名(axis=1)作为要删除的标签,而你直接传入了一个子DataFrame。这会导致Pandas误将子DataFrame的列名当作要删除的标签,从而抛出KeyError。另外,pd.read_csv()返回的已经是DataFrame,无需再用pd.DataFrame()转换,这一步属于冗余操作。

正确实现方法

方法1:布尔索引(推荐,简洁高效)

直接筛选出date列大于等于"2014-10-26"的行,这是Pandas中过滤行的标准做法:

import pandas as pd

# 读取数据(read_csv直接返回DataFrame)
dataset = pd.read_csv("charts.csv")

# 推荐:将date列转换为datetime类型,确保日期比较逻辑准确
dataset['date'] = pd.to_datetime(dataset['date'])

# 筛选符合条件的行
dataset = dataset[dataset['date'] >= "2014-10-26"]

方法2:使用drop()(若坚持用此方法)

如果一定要用drop(),需要传入要删除的行的索引:

import pandas as pd

dataset = pd.read_csv("charts.csv")
dataset['date'] = pd.to_datetime(dataset['date'])

# 获取需要删除的行的索引(日期早于2014-10-26的行)
rows_to_drop = dataset[dataset['date'] < "2014-10-26"].index

# 删除指定索引的行
dataset = dataset.drop(rows_to_drop)

额外说明

  • 转换date列为datetime类型是良好实践:虽然YYYY-MM-DD格式的字符串比较也能生效,但转换后可支持更复杂的日期操作(如按月份筛选、计算日期差等)。
  • 对于8万行的DataFrame,布尔索引的性能优于drop(),因为它直接生成新的DataFrame,无需额外的索引查找操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 23:01:28