Как я могу использовать numpy .timedelta, чтобы добавить (или вычесть) 1 месяц? - PullRequest
3 голосов
/ 26 марта 2020

Я пытаюсь уменьшить дату до 1 месяца. Я имею в виду, чтобы получить ту же дату на 1 месяц раньше.

import pandas as pd 
import numpy as np 

pd.to_datetime(201905, format='%Y%m') - np.timedelta64(1, 'M')

Я ожидал получить 1-й день предыдущего месяца, например

Отметка времени ('2019-04-01 00:00:00')

Но на выходе получается

Отметка времени ('2019-03-31 13:30:54')

Проблема, похоже, та же, когда я ' Я пытаюсь добавить месяц.

Код

pd.to_datetime(201905, format='%Y%m') + np.timedelta64(1, 'M')

Возвращает

Отметка времени ('2019-05-31 10:29:06')

вместо

Отметка времени ('2019-06-01 00:00:00')

Как решить проблему?

Моя последняя цель - взять дату в целочисленном формате YYYYmm (например, 201905), затем добавить (или вычесть) любое количество месяцев и вернуть новую дату в том же формате (целое число, YYYYmm). Может быть, это легко сделать с помощью других пакетов?

1 Ответ

3 голосов
/ 26 марта 2020

Timedelta одного месяца - это длина года, деленная на 12, поэтому она составляет 'average' единицу месяца:

a = pd.to_datetime(201905, format='%Y%m') - np.timedelta64(1, 'M')
print (a)
2019-03-31 13:30:54

Если хотите вычесть 1 месяц, используйте offsets.DateOffset :

b = pd.to_datetime(201905, format='%Y%m') - pd.offsets.DateOffset(months=1)    
print (b)
2019-04-01 00:00:00
...