You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Pandas生成指定日期范围的多频率Datetime Series

如何扩展单日分时段频率的Pandas时间序列到跨年度范围?

我懂你已经搞定了单日的分频率时间序列生成,现在想把这个逻辑扩展到2015-12-01到2016-12-01的整段时间对吧?其实核心就是遍历目标日期范围内的每一天,动态给每个时段的pd.date_range加上当前日期,再把所有天的序列拼接起来就行。下面给你完整的实现方案:

实现思路

  1. 先生成目标范围内的所有日期(只保留日期部分,不带时间)
  2. 循环每个日期,为当天的三个时段分别生成时间序列
  3. 拼接当天的三个序列,存入临时列表
  4. 最后把所有天的序列一次性拼接,重置索引得到最终结果

完整代码

import pandas as pd

# 定义时间范围的起始和结束日期(包含2016-12-01)
start_date = pd.to_datetime("2015-12-01").date()
end_date = pd.to_datetime("2016-12-01").date()

# 生成需要处理的所有日期列表,freq='D'表示按天生成
date_list = pd.date_range(start=start_date, end=end_date, freq='D').date

# 初始化空列表存储每天的时间序列(用列表存再批量拼接比循环里每次concat效率更高)
daily_series_list = []

for current_date in date_list:
    # 把当前日期转为字符串,方便和时段时间拼接
    date_str = str(current_date)
    
    # 按原逻辑生成当天三个时段的序列
    # 01:00-07:00,1小时频率,共7个整点(01:00到07:00)
    part1 = pd.Series(pd.date_range(f"{date_str} 01:00:00", periods=7, freq="h"))
    # 07:30-21:30,30分钟频率,共29个时间点(到21:30结束,衔接后面的22:00)
    part2 = pd.Series(pd.date_range(f"{date_str} 07:30:00", periods=29, freq="30min"))
    # 22:00-次日00:00,1小时频率,共3个时间点(22:00、23:00、次日00:00)
    part3 = pd.Series(pd.date_range(f"{date_str} 22:00:00", periods=3, freq="h"))
    
    # 拼接当天的三个序列,加入列表
    daily_series = pd.concat([part1, part2, part3])
    daily_series_list.append(daily_series)

# 拼接所有天的序列,得到最终结果
final_series = pd.concat(daily_series_list)
# 重置索引,去掉原来的分段索引
final_series.reset_index(inplace=True, drop=True)

# 查看结果的前后部分验证
print("前5条数据:")
print(final_series.head())
print("\n后5条数据:")
print(final_series.tail())

关键细节说明

  • 用pd.date_range(..., freq='D')生成日期列表时,会自动处理2016年是闰年的情况,不用额外调整
  • 循环中使用f-string拼接日期和时间,动态生成每个时段的起始时间,完美复用你原来的单日逻辑
  • 用列表存储每天的序列再最后一次性concat,比循环中每次拼接效率高很多(尤其是处理一整年的数据时)
  • 保持了你原代码中的periods参数,确保每个时段的时间点数量和覆盖范围完全一致

内容的提问来源于stack exchange,提问作者pars1221

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 08:18:39