将“自1582年10月14日以来的秒数”转换为Python日期时间

时间:2018-07-24 15:35:32

标签: python pandas dataframe

我正在尝试将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日(朱利安历法开始日期)为单位记录。

我还能怎么做?

1 个答案:

答案 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')