首页 > 解决方案 > 在大熊猫中添加 2262 年之后的时间

问题描述

我想在熊猫中添加迄今为止的月份。它们可能会超过 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')

如何应对?

标签: pythonpandastimetimestamp

解决方案


datetime

Pandas.Timestamp 旨在将更精细的时间分辨率处理到纳秒级。此精度占用了分配给它的 64 位中的足够多,以至于它只能上升到 2262 年。但是,datetime.datetime没有这个限制并且可以上升到 year 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)

推荐阅读