熊猫Dateoffset行为不一致

用户名

我试图将几个月添加到时间戳对象,并且不了解以下行为:

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

Valdi_Bo

添加以月表示的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个月,则结果是2月28日,因为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月底没有“停止”发生。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章