【问题标题】:Round a Pandas Timestamp using an offset使用偏移量舍入 Pandas 时间戳
【发布时间】:2018-09-09 14:04:30
【问题描述】:

我想使用 pandas.tseries.offsets 对 Pandas Timestamp 进行舍入(下限)(例如重新采样时间序列但只有一行)

import pandas as pd
from pandas.tseries.frequencies import to_offset
freq = to_offset("H")
dt = pd.Timestamp('2017-01-03 05:02:00')
# what should I do
# to get pd.Timestamp('2017-01-03 05:00:00')

不知pandas.core.resample.TimeGrouper是不是帮不上忙

grouper = pd.Grouper(freq="H")

【问题讨论】:

    标签: python pandas timestamp resampling


    【解决方案1】:

    时间戳可以使用时间频率字符串向下取整:

    https://pandas.pydata.org/pandas-docs/stable/generated/pandas.Timestamp.floor.html

    pd.Timestamp.now().floor('M')
    pd.Timestamp.now().floor('H')
    pd.Timestamp.now().floor('D')
    

    【讨论】:

      【解决方案2】:

      可能有一种使用偏移量的方法,但如果您只是想将时间戳“固定”为'%H:00:00' 格式,您也可以只使用pd.Timestamps 继承自@ 的replace 方法987654325@(见this answer

      dt = pd.Timestamp('2017-01-03 05:02:00')
      
      dt.replace(minute=0, second=0)
      
      # Timestamp('2017-01-03 05:00:00')
      

      如果您想在一整列日期时间上执行此操作,您可以将其应用为 lambda:

      df = pd.DataFrame(pd.date_range('2018-01-01 09:00:00','2018-01-01 10:00:00', freq='S'), columns = ['datetime'])
      
      >>> df.head()
                   datetime
      0 2018-01-01 09:00:00
      1 2018-01-01 09:00:01
      2 2018-01-01 09:00:02
      3 2018-01-01 09:00:03
      4 2018-01-01 09:00:04
      
      df['datetime'] = df.datetime.apply(lambda x: x.replace(minute=0, second=0))
      
      >>> df.head()
      0   2018-01-01 09:00:00
      1   2018-01-01 09:00:00
      2   2018-01-01 09:00:00
      3   2018-01-01 09:00:00
      4   2018-01-01 09:00:00
      

      【讨论】:

      • 抱歉,我正在寻找一个带有偏移的解决方案,并且希望能够简单地将“H”更改为“4H”、“1D”...
      猜你喜欢
      • 2019-11-22
      • 1970-01-01
      • 1970-01-01
      • 2019-08-31
      • 1970-01-01
      • 2015-01-17
      • 1970-01-01
      • 1970-01-01
      • 2012-08-24
      相关资源
      最近更新 更多