【问题标题】:Pandas DateOffset, step back one dayPandas DateOffset,退后一天
【发布时间】: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 时区运行。

【问题讨论】:

    标签: date pandas


    【解决方案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
        

        【讨论】:

          猜你喜欢
          • 2017-09-21
          • 1970-01-01
          • 2017-08-27
          • 2014-07-18
          • 1970-01-01
          • 1970-01-01
          • 2021-04-29
          • 2012-11-07
          • 1970-01-01
          相关资源
          最近更新 更多