我正在尝试将SPSS时间戳转换为人类可读的时间戳,例如
data['Completion_date'] = pd.to_datetime(
data['Completion_date']/86400, unit='D',
origin=pd.Timestamp("1582-10-14"))
但是得到
Traceback (most recent call last):
File "<input>", line 1, in <module>
File "pandas/_libs/tslibs/timestamps.pyx", line 644, in pandas._libs.tslibs.timestamps.Timestamp.__new__
File "pandas/_libs/tslibs/conversion.pyx", line 275, in pandas._libs.tslibs.conversion.convert_to_tsobject
File "pandas/_libs/tslibs/conversion.pyx", line 470, in pandas._libs.tslibs.conversion.convert_str_to_tsobject
File "pandas/_libs/tslibs/conversion.pyx", line 439, in pandas._libs.tslibs.conversion.convert_str_to_tsobject
File "pandas/_libs/tslibs/np_datetime.pyx", line 121, in pandas._libs.tslibs.np_datetime.check_dts_bounds
pandas._libs.tslibs.np_datetime.OutOfBoundsDatetime: Out of bounds nanosecond timestamp: 1582-10-14 00:00:00
例如:13725072000应该转换为2017-09-18
SPSS中的日期以1582年10月14日(朱利安历法开始日期)为单位记录。
我还能怎么做?
答案 0 :(得分:2)
来自docs:
由于熊猫以纳秒分辨率表示时间戳,因此时间 可以使用64位整数表示的跨度仅限于 大约584年:
In [68]: pd.Timestamp.min Out[68]: Timestamp('1677-09-21 00:12:43.145225') In [69]: pd.Timestamp.max Out[69]: Timestamp('2262-04-11 23:47:16.854775807')
您的日期早于最早的时间戳。
您可能想要解决此问题的一种方法是,将日期调整为改为基于to_datetime
默认的Unix时间,该时间从儒略历(thanks, Google!)开始后141,428天开始。然后,您可以执行以下操作:
data['Completion_date'] = pd.to_datetime((data['Completion_date']/86400)-141428, unit='D')