pandas.to_datetime从2270-12-31开始返回NaT

时间:2017-12-09 18:55:18

标签: python-3.x pandas python-datetime

我正在使用python 3.5.3和pandas 0.21.0

以后的日期工作正在进行:

pandas.to_datetime('2260-12-31', format='%Y-%m-%d', errors='coerce')
Timestamp('2260-12-31 00:00:00')

但是从2270开始,它不再被接受:

pandas.to_datetime('2270-12-31', format='%Y-%m-%d', errors='coerce')
NaT

如果我使用datetime.strptime,它适用于所有情况:

datetime.datetime.strptime('2270-12-31', '%Y-%m-%d')
datetime.datetime(2270, 12, 31, 0, 0)

datetime.datetime.strptime('9999-12-31-23.59.59.999999', '%Y-%m-%d-%H.%M.%S.%f')
datetime.datetime(9999, 12, 31, 23, 59, 59, 999999)

是因为pandas返回一个Timestamp而第二个是datetime.datetime吗?

在pandas文档中,我看到以下内容,但我不知道Timestamp.max的值是多少。使用其他选项,在最佳情况下返回初始字符串。

  

如果无法返回指定类型(例如,何时)   输入的任何元素在Timestamp.min之前或在Timestamp.max之后)   return将具有datetime.datetime类型(或correspoding   阵列/系列)。

有没有办法让它与to_datetime一起使用?如果有许多列都具有不同的日期和时间戳模式,并且想要在pandas数据帧中将所有这些列从对象转换为datetime64 [ns],则非常方便。

1 个答案:

答案 0 :(得分:2)

它按预期工作。原因是时间戳实际上是整数下的整数。它们代表64位整数+偏移时间。在这种情况下' 2270-12-31'离偏移太远,不适合64位整数,所以它不是时间。