熊猫DateOffset,退后一天

时间:2016-04-21 08:51:53

标签: date pandas

我试着理解为什么

print(pd.Timestamp("2015-01-01") - pd.DateOffset(day=1))

不会导致

pd.Timestamp("2014-12-31")

我正在使用Pandas 0.18。我在CET时区内跑。

3 个答案:

答案 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