Pandas Dateoffset行为不一致

问题描述 投票:2回答:1

我正在尝试向时间戳对象添加月份,但不了解以下行为:

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是Timestamp('2021-05-28 00:00:00'),而t2是Timestamp('2021-05-29 00: 00:00')

这是错误吗?正确答案应该是t2

python pandas
1个回答
0
投票

添加以月表示的DateOffsets是一个棘手的问题。实际上是像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

请注意,当您向2020-11-29]添加3个月时,结果为28th2月的一天,因为2021中的Feruary只有28天。

从该日期开始的下一个添加项将产生2021-05-28

(天为也28)。

但是当您添加6

个月的DateOffset时,情况就如您执行:
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

正如预期的那样,因为2月底没有发生“停止”。

© www.soinside.com 2019 - 2024. All rights reserved.