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

使用Pandas筛选指定日期数据返回空DataFrame的解决方法

问题:筛选指定日期的Timestamp数据返回空DataFrame

你的DataFrame如下:

forecasts
Out[15]: 
             timestamp         1            2          
0  2022-11-08 12:12:15  5679.658691  5400.217773  
1  2022-11-08 12:38:49  5679.658691  5400.217773  
2  2022-11-09 11:05:53  5863.616699  5619.101562  
3  2022-11-10 10:46:27  6047.025391  5714.026367  
4  2022-11-11 11:59:29  6147.197754  5750.312988  
5  2022-11-12 11:56:45  6008.574707  5775.820312  

你尝试用以下代码筛选2022-11-11当天的数据:

forecasts = forecasts[forecasts['timestamp'] == pd.Timestamp(str(2022) + '-' + str(11) + '-' + str(11))]

但返回空DataFrame,原因是pd.Timestamp('2022-11-11')默认对应2022-11-11 00:00:00,而目标行的timestamp是2022-11-11 11:59:29,精确到时分秒,直接全等匹配无法命中。

解决方案

这里提供三种可行的实现方式:

方法1:提取日期对象进行匹配

直接提取timestamp列的日期部分(忽略时分秒),和目标日期的日期对象比较:

target_date = pd.Timestamp('2022-11-11').date()
forecasts = forecasts[forecasts['timestamp'].dt.date == target_date]

方法2:使用日期范围筛选

匹配当天0点到次日0点之间的所有数据,涵盖当天任意时分秒的记录:

start_date = pd.Timestamp('2022-11-11')
end_date = start_date + pd.Timedelta(days=1)
forecasts = forecasts[(forecasts['timestamp'] >= start_date) & (forecasts['timestamp'] < end_date)]

方法3:归一化时间后匹配(Pandas 1.3.0+)

用dt.normalize()将timestamp的时分秒部分重置为00:00:00,再和目标日期的Timestamp对象比较:

forecasts = forecasts[forecasts['timestamp'].dt.normalize() == pd.Timestamp('2022-11-11')]

以上三种方法都能正确筛选出2022-11-11当天的所有数据行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 20:10:30