Pandas DateOffset,退后一天

Posted

技术标签:

【中文标题】Pandas DateOffset,退后一天【英文标题】:Pandas DateOffset, step back one day 【发布时间】:2016-08-14 08:28:12 【问题描述】:

我试图理解为什么

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

不会导致

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

我正在使用 Pandas 0.18。我在 CET 时区运行。

【问题讨论】:

【参考方案1】:

您可以查看pandas.tseries.offsets.DateOffset:

*kwds 添加或替换偏移值的时间参数。 添加到偏移量的参数(如 Timedelta):

年 月 周 天 小时 分钟 秒 微秒 纳秒

替换偏移值的参数:

年 月 天 工作日 小时 分钟 秒 微秒 纳秒

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

也可以减去Timedelta:

print(pd.Timestamp("2015-01-01") - pd.Timedelta(1, unit='d'))

【讨论】:

【参考方案2】:

pd.DateOffset(day=1) 有效(即不会引发错误),因为“day”是有效参数,“days”也是如此。

请看下面的:“day”重置实际日期,“days”添加到原始日期。

pd.Timestamp("2019-12-25") + pd.DateOffset(day=1)

时间戳('2019-12-01 00:00:00')

pd.Timestamp("2019-12-25") + pd.DateOffset(days=1)

时间戳('2019-12-26 00:00:00')

【讨论】:

【参考方案3】:

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

【讨论】:

以上是关于Pandas DateOffset,退后一天的主要内容,如果未能解决你的问题,请参考以下文章

pandas使用pd.DateOffset生成时间偏移量把dataframe数据中的时间数据列统一相加N天放大向后偏移N天

pandas使用pd.DateOffset生成时间偏移量把dataframe数据中的时间数据列统一相减N天M小时缩小向前偏移N天M小时

pandas使用pd.DateOffset生成时间偏移量把dataframe数据中的时间数据列统一相减N天M小时缩小向前偏移N天M小时

pandas使用pd.DateOffset生成时间偏移量把dataframe数据中的时间数据列统一相加N天M小时放大向后偏移N天M小时

pandas使用pd.DateOffset生成时间偏移量把dataframe数据中的时间数据列统一相加N天M小时放大向后偏移N天M小时

DateOffset Pandas 减法