Python:将对象列转换为datetime并与当前日期进行比较

时间:2018-02-12 10:13:23

标签: python datetime dataframe type-conversion

我的数据框有一个包含

等日期的列
+-----+---------------------+
| Nr  |        Date         |
+-----+---------------------+
| 146 | 2011-03-11 00:00:00 |
| 654 | 2014-05-16 00:00:00 |
| 312 | 2020-12-01 00:00:00 |
| 675 | 9999-12-31 00:00:00 |
+-----+---------------------+

现在我想将它们(当前类型对象)转换为数据框中的类型日期时间,并将它们与当前日期进行比较。

转换时,我试过

df['Date'] = pd.to_datetime(df['Date'], format = '%Y-%m-%d %H:%M:%S')

但它返回错误:

OutOfBoundsDatetime:超出界限纳秒时间戳:9999-12-31 00:00:00

结果应该是相同的数据框,但仅限于有效日期。因此,应删除所有已经过了日期的行,只保留未来的日期:

+-----+---------------------+
| Nr  |        Date         |
+-----+---------------------+
| 312 | 2020-12-01 00:00:00 |
| 675 | 9999-12-31 00:00:00 |
+-----+---------------------+

感谢您的支持。

3 个答案:

答案 0 :(得分:1)

Pandas使用以纳秒分辨率表示的时间戳。由于时间戳存储在64位数字中,因此时间戳的范围是有限的,应该介于某个范围之间。

范围指定为here

答案 1 :(得分:0)

OutOfBoundsDatetime:超出界限纳秒时间戳:9999-12-31 00:00:00 错误是因为您将字符串转换为日期 9999 的日期时间。

大熊猫的时间戳限制仅为584年(1677-2262)

答案 2 :(得分:0)

如果您只想保留未来的日期,并且希望保留9999年的日期,则可以执行以下操作:

df['Date'][(pd.to_datetime(df['Date'], errors = 'coerce') > pd.to_datetime('today')) | (pd.to_datetime(df['Date'], errors = 'coerce').isnull())]

这适用于您显示的数据,但对于任何NaT都会传递True,所以要小心。