我试图将几个月添加到时间戳对象,并且不了解以下行为:
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
添加以月表示的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] 删除。
我来说两句