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分钟的时间序列?
python<br>s = ["{:0>2}:{:0>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)
核心方案:
- pandas.date_range - 最推荐,一行代码搞定,功能强大
- datetime.timedelta循环 - 纯Python标准库方案
- 列表推导式 - 结合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)]
<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
这个不错


