【发布时间】:2018-07-22 11:22:23
【问题描述】:
我的数据框有一列包含日期,如
+-----+---------------------+
| 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 |
+-----+---------------------+
感谢您的支持。
【问题讨论】:
-
这里有点好奇;为什么您认为结果应该只包含有效日期并且为您删除了无效日期?看看here,除非你传入明确不同的
errorarg 值,否则你不会得到你所期望/上面所说的。总之,pandas 对你的9999不满意。 -
df['Date'] = pd.to_datetime(df['Date'], format = '%Y-%m-%d %H:%M:%S', errors= 'coerce')或者如果您想省略无效日期,请使用errors = 'ignore' -
这不起作用。每个日期
9999-12-31 00:00:00,然后变成NaT -
据我所知,不可能做你想做的事。最大。 Pandas 可以处理的时间是
pd.Timestamp.max = Timestamp('2262-04-11 23:47:16.854775807')。您的选择是ignore错误并传递字符串,或coerce错误并传递 NaT。
标签: python datetime dataframe type-conversion