我的数据框有一个包含
等日期的列+-----+---------------------+
| 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 |
+-----+---------------------+
感谢您的支持。
答案 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,所以要小心。