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

如何在Pandas数据集中按日期范围筛选生成变量?

Pandas 日期筛选问题解决方法

问题根源

你之前的筛选写法逻辑错误——data['todays_date']['04-20-20']是试图用日期字符串去索引列,而列中存储的是datetime对象,自然会触发KeyError,和日期格式转换本身关系不大,主要是对Pandas的布尔筛选逻辑理解有误。

第一步:确认日期转换有效性

先确保todays_date确实被正确转成datetime类型:

# 重新执行转换(确保格式匹配)
data['todays_date'] = pd.to_datetime(data['todays_date'], format='%m-%d-%y')
# 验证类型,输出应为 datetime64[ns]
print(data['todays_date'].dtype)

如果转换时存在无效日期,可添加errors='coerce'将其转为NaT(缺失日期),后续再处理:

data['todays_date'] = pd.to_datetime(data['todays_date'], format='%m-%d-%y', errors='coerce')

正确的日期筛选方法

1. 筛选03-23-23之前的实例

# 先将目标 cutoff 日期转为 datetime 对象
cutoff = pd.to_datetime('03-23-23', format='%m-%d-%y')
# 布尔筛选,保留日期早于 cutoff 的行
early_instances = data[data['todays_date'] < cutoff]

若需要包含03-23-23当天,将<改为<=即可。

2. 筛选03-24-23至11-12-23之间的实例

方法一:用布尔运算符组合条件

start = pd.to_datetime('03-24-23', format='%m-%d-%y')
end = pd.to_datetime('11-12-23', format='%m-%d-%y')
# 注意用&连接条件,且每个条件需加括号
later_instances = data[(data['todays_date'] >= start) & (data['todays_date'] <= end)]

方法二:用between方法简化代码

later_instances = data[data['todays_date'].between(start, end)]

进阶优化:将日期设为索引

如果需要频繁按日期筛选,把todays_date设为索引会更高效,还支持切片操作:

# 设置日期为索引
data = data.set_index('todays_date')
# 筛选早于 cutoff 的数据
early_instances = data[data.index < cutoff]
# 筛选日期范围(包含首尾)
later_instances = data.loc[start:end]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 05:02:27