Pandas поведение Dateoffset несовместимо - PullRequest
2 голосов
/ 30 мая 2020

Я пытаюсь добавить месяцы к объекту отметки времени и не понимаю следующего поведения:

import pandas as pd

t1 = pd.Timestamp('2020-05-29')+4*pd.DateOffset(months=3)
t2 = pd.Timestamp('2020-05-29')+2*pd.DateOffset(months=6)

Я бы подумал, что t1 и t2 должны быть равны (12 месяцев в обоих случаях), но t1 - это отметка времени ('2021-05-28 00:00:00'), а t2 - это отметка времени ('2021-05-29 00:00:00')

Это ошибка? правильный ответ должен быть t2

1 Ответ

1 голос
/ 30 мая 2020

Добавление DateOffset в месяцах - непростая задача. На самом деле выражение типа pd.Timestamp('2020-05-29') + 4 * pd.DateOffset(months=3) выполняется под капотом путем добавления этого смещения 4 раза.

Запустите такой код:

tt = pd.Timestamp('2020-05-29')
for i in range(4):
    tt += pd.DateOffset(months=3)
    print(f'{i}: {tt}')

, и вы получите:

0: 2020-08-29 00:00:00
1: 2020-11-29 00:00:00
2: 2021-02-28 00:00:00
3: 2021-05-28 00:00:00

Обратите внимание, что если вы добавите 3 месяца к 2020-11-29 , то получите 28-е число февраля, так как в Феруари в 2021 осталось только 28 дней.

Следующее сложение, начиная с этой даты, дает 2021-05-28 (день также 28 ).

Но когда вы добавляете DateOffset 6 месяцев, ситуация такая, как вы выполнили:

tt = pd.Timestamp('2020-05-29')
for i in range(2):
    tt += pd.DateOffset(months=6)
    print(f'{i}: {tt}')

результат:

0: 2020-11-29 00:00:00
1: 2021-05-29 00:00:00

Как и предполагалось, так как нет "stop "в конце февраля произошло.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...