使用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
相关产品推荐
相关产品推荐

