Добавьте время в пандах после 2262 года - PullRequest
2 голосов
/ 17 мая 2019

Я бы хотел добавить месяцы в пандах. Они могут превышать 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 голосов
/ 17 мая 2019

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_pydatetime и to_pytimedelta

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

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