在2262年以后在熊猫中增加时间

时间:2019-05-17 14:28:26

标签: python pandas time timestamp

我想在熊猫中添加几个月的时间。它们可能会超过2262年。有相对较少的解决方案:

import numpy as np
import pandas as pd

pd.Timestamp('2018-01-22 00:00:00') + np.timedelta64(12, 'M')

这将导致

Timestamp('2019-01-22 05:49:12')

但是,当我增加较大的数字(结果是超过2262年)时:

pd.Timestamp('2018-01-22 00:00:00') + np.timedelta64(3650, 'M')

Python确实返回结果:

Timestamp('1737-09-02 14:40:26.290448384')

如何应对?

1 个答案:

答案 0 :(得分:0)

datetime

Pandas.Timestamp旨在处理更精细的时间分辨率,直至纳秒。此精度占用分配给它的64位中的足够多,因此只能达到2262年。但是,datetime.datetime没有此限制,可以达到9999年。如果您开始使用datetime对象而不是Timestamp对象,则将失去一些功能,但将可以超越2262

此外,您的月份数也超出了Timedelta

的最大天数

让我们从选择一个更合理的月数开始,该月数是48(四年)的整数倍。

d = pd.Timedelta(48, 'M')

还有我们的约会

t = pd.Timestamp('2018-01-22')

一个倍数,表示我们的48个月适合期望的3650个月的次数。

m = 3650 / 48

然后我们可以使用to_pydatetimeto_pytimedelta

t.to_pydatetime() +  d.to_pytimedelta() * m

datetime.datetime(2322, 3, 24, 14, 15, 0, 1)