【问题标题】:Creating date range pairs in pandas在熊猫中创建日期范围对
【发布时间】:2021-06-30 19:44:56
【问题描述】:

我有两个日期时间,我想在它们之间生成 4 小时的固定间隔(不包括最后一个间隔,如果前一个时间戳和 end 之间的时间少于 4 小时,则可以少于 4 小时)。

我被困在pandas.date_range 的间隔生成上,它只返回end 时间戳。例如:

import pandas
from datetime import datetime

start = datetime(2021, 4, 2, 20, 40, 0)
end = datetime(2021, 4, 4, 18, 20, 0)


dates = pandas.date_range(start=end, end=end, freq='4H')
dates

DatetimeIndex(['2021-04-04 18:20:00'], dtype='datetime64[ns]', freq='4H')

目的是生成日期时间对的列表,例如:

[['2021-04-02 20:40:00', '2021-04-03 00:40:00'], ['2021-04-03 00:40:00', '2021-04-03 04:40:00']...['2021-04-04 16:40:00', '2021-04-04 18:20:00']] #last pair can be cut off by `end`.  

我在语法上做错了什么,如何使用pandas.date_range 生成一对间隔列表?

【问题讨论】:

    标签: python pandas datetime timestamp date-range


    【解决方案1】:

    有一个错字 (start=end) 导致 dates 只有 1 个值。

    但修正错字只会给你一个固定的日期范围。如果你想要那些嵌套的对,你可以将 dates 移动 4 小时和 zip()

    dates = pandas.date_range(start=start, end=end, freq='4H')
    shift = dates + pandas.Timedelta(hours=4)
    
    pairs = list(zip(dates, shift))
    
    # [(Timestamp('2021-04-02 20:40:00', freq='4H'),
    #   Timestamp('2021-04-03 00:40:00', freq='4H')),
    #  (Timestamp('2021-04-03 00:40:00', freq='4H'),
    #   Timestamp('2021-04-03 04:40:00', freq='4H')),
    #  (Timestamp('2021-04-03 04:40:00', freq='4H'),
    #   Timestamp('2021-04-03 08:40:00', freq='4H')),
    # ...
    

    或者对于列表列表而不是元组列表:

    pairs = list(map(list, zip(dates, shift)))
    

    【讨论】:

      猜你喜欢
      • 2018-07-13
      • 2020-12-23
      • 2016-10-05
      • 2019-09-04
      • 1970-01-01
      • 2021-12-29
      • 2017-01-13
      • 2016-05-08
      • 2019-07-07
      相关资源
      最近更新 更多