我试着理解为什么
print(pd.Timestamp("2015-01-01") - pd.DateOffset(day=1))
不会导致
pd.Timestamp("2014-12-31")
我正在使用Pandas 0.18。我在CET时区内跑。
答案 0 :(得分:7)
有拼写错误,您需要将s
添加到day
- days
。但它非常有趣,它不会引发error
。
print(pd.Timestamp("2015-01-01") - pd.DateOffset(days=1))
2014-12-31 00:00:00
另一种解决方案:
print(pd.Timestamp("2015-01-01") - pd.offsets.Day(1))
2014-12-31 00:00:00
Oalso可以减去Timedelta
:
print(pd.Timestamp("2015-01-01") - pd.Timedelta(1, unit='d'))
答案 1 :(得分:2)
pd.DateOffset(day=1)
之所以有效(即不会出现错误)是因为“ day ”和“ days ”都是有效参数。
查看以下内容:“ day ”重置实际日期,“ days ”添加到原始日期。
pd.Timestamp(“ 2019-12- 25 ”)+ pd.DateOffset( day = 1)
Timestamp('2019-12- 01 00:00:00')
pd.Timestamp(“ 2019-12- 25 ”)+ pd.DateOffset(天 = 1)
Timestamp('2019-12- 26 00:00:00')
答案 2 :(得分:1)
Day(d)和DateOffset(days = d)在带有时区信息的时间戳上使用时表现不完全相同(至少在pandas 0.18.0上)。看起来DateOffset在保留小时信息的同时增加了1天,而Day只增加了24小时的经过时间。
>>> # 30/10/2016 02:00+02:00 is the hour before the DST change
>>> print(pd.Timestamp("2016-10-30 02:00+02:00", tz="Europe/Brussels") + pd.offsets.Day(1))
2016-10-31 01:00:00+01:00
>>> print(pd.Timestamp("2016-10-30 02:00+02:00", tz="Europe/Brussels") + pd.DateOffset(days=1))
2016-10-31 02:00:00+01:00