我正在使用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],则非常方便。
答案 0 :(得分:2)
它按预期工作。原因是时间戳实际上是整数下的整数。它们代表64位整数+偏移时间。在这种情况下' 2270-12-31'离偏移太远,不适合64位整数,所以它不是时间。