首页 > 解决方案 > DateTime 过滤器返回错误的结果

问题描述

我有以下数据框“df”:

DateTime
2019-03-07 23:00:00
2019-03-07 23:10:00
2019-03-08 23:10:00
2019-03-09 23:10:00
2019-03-10 23:10:00
2019-03-11 23:10:00
2019-03-12 23:10:00

df.dtypes:
DateTime              datetime64[ns]

我需要在“2019-03-11”之前返回行。这是我当前的代码:

value_to_check = pd.Timestamp(2019, 3, 11)
df["DateTime"] = pd.to_datetime(df["DateTime"])

df[df["DateTime"]<value_to_check]
# OR
df.query('DateTime < "2019-03-11 00:00:00"').tail()

由于某种原因,它返回错误的结果(缺少“2019-03-10 23:10:00”):

2019-03-07 23:00:00
2019-03-07 23:10:00
2019-03-08 23:10:00
2019-03-09 23:10:00

但令人惊讶的是,如果我将日期限制更改为低于 10 的任何数字,例如“2019-03-08 00:00:00”,它会很好地工作。

标签: pythonpandasdatetime

解决方案


DateTime列与字符串进行比较有效:

>>> df[df['DateTime'] < '2019-03-11']
             DateTime
0 2019-03-07 23:00:00
1 2019-03-07 23:10:00
2 2019-03-08 23:10:00
3 2019-03-09 23:10:00
4 2019-03-10 23:10:00

这也有效:

df[df['DateTime'] < pd.Timestamp(2019, 3, 11)]

df.query('DateTime < "2019-03-11 00:00:00"')

你的 Python 和 Pandas 版本是什么?


推荐阅读