Python中如何简化生成每隔5分钟的时间序列?

如下:
for x in range(0,24):
if len(str(x)) == 1:
x = str(0)+str(x)
for y in range(0,60,5):
if len(str(y)) == 1:
y = str(0)+str(y)
print(str(x)+":"+str(y))
Python中如何简化生成每隔5分钟的时间序列?

15 回复

python<br>s = ["{:0&gt;2}:{:0&gt;2}".format(i/60,i%60) for i in range(0,86400,5)]<br>


import pandas as pd
from datetime import datetime, timedelta

# 方法1:使用pandas的date_range(最简洁)
def generate_time_series_pandas(start_time, periods):
    """
    使用pandas生成时间序列
    start_time: 起始时间字符串,如'2024-01-01 00:00:00'
    periods: 需要生成的时间点数量
    """
    return pd.date_range(start=start_time, periods=periods, freq='5min')

# 方法2:纯Python实现
def generate_time_series_pure(start_str, periods):
    """
    纯Python实现的时间序列生成
    start_str: 起始时间字符串,格式'%Y-%m-%d %H:%M:%S'
    periods: 生成的时间点数量
    """
    start_time = datetime.strptime(start_str, '%Y-%m-%d %H:%M:%S')
    return [start_time + timedelta(minutes=5*i) for i in range(periods)]

# 使用示例
if __name__ == "__main__":
    # 示例1:生成今天开始的10个时间点
    today_start = datetime.now().replace(hour=0, minute=0, second=0, microsecond=0)
    time_series = [today_start + timedelta(minutes=5*i) for i in range(10)]
    
    # 输出结果
    for ts in time_series:
        print(ts.strftime('%Y-%m-%d %H:%M:%S'))
    
    # 或者用pandas更简单
    print("\n使用pandas:")
    ts_pandas = pd.date_range(start='2024-01-01 08:00:00', periods=6, freq='5min')
    print(ts_pandas)

核心方案:

  1. pandas.date_range - 最推荐,一行代码搞定,功能强大
  2. datetime.timedelta循环 - 纯Python标准库方案
  3. 列表推导式 - 结合datetime实现简洁生成

一句话建议: 直接上pandas的date_range,参数调好就完事了。

把 5 分钟看成秒了,把 86400 换成 1440

[str(x) + ‘:’ + str(y) for x in range(0, 24) for y in range(0, 60, 5)] 用推导式啊。。。

["%02d:%02d" %(h,m) for h in range(0, 24) for m in range(0, 60, 5)]

如果用过 Pandas 的话有方便的时间序列函数.

python<br>import pandas as pd<br>pd.date_range('2017-01-01 01:00:00', '2017-01-01 02:00:00', freq= '5min')<br><br>

arrow 也有专门的时间序列函数

if len(str(y)) == 1:
为啥不直接 if y< 10: 呢。

seq = ["%02d:%02d" %(i, j) for i in range(0,24) for j in range(0,60,5)]

你需要 rrule

<br>import datetime<br>start_dt = datetime.datetime(2017, 1, 1)<br>interval = datetime.timedelta(seconds=300)<br>for i in range(24 * 12):<br> print (start_dt + interval * i).strftime("%H:%M")<br>

import arrow
start, end = arrow.now().span(‘day’)
print [repr® for r in arrow.Arrow.range(‘minute’, start, end) if r.minute % 5 == 0]

9 楼+1 dateutil rrule

这个不错

回到顶部