【问题标题】:Add time in pandas beyond year 2262在大熊猫中添加 2262 年之后的时间
【发布时间】:2019-10-04 21:48:27
【问题描述】:

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

如何应对?

【问题讨论】:

标签: python pandas time timestamp


【解决方案1】:

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)

【讨论】:

    猜你喜欢
    • 2021-10-02
    • 2021-02-10
    • 2021-04-25
    • 2023-02-10
    • 1970-01-01
    • 2020-12-06
    • 2018-07-25
    • 1970-01-01
    • 2019-09-12
    相关资源
    最近更新 更多