如何基于已有Pandas DatetimeIndex创建未来索引且无需硬编码频率
从Pandas DatetimeIndex自动获取频率生成未来索引
你可以直接利用DatetimeIndex自带的freq属性自动获取索引频率,无需硬编码天数、秒数等单位,具体实现如下:
- 通过
base_idx.freq获取原索引的频率对象(比如日频率<Day>、小时频率<Hour>等) - 以原索引最后一项加上该频率步长作为未来索引的起始点
- 用
pd.date_range生成指定周期数的未来索引,直接复用获取到的频率
完整示例代码
import pandas as pd # 原索引(支持任意频率,如D、H、T、S等) base_idx = pd.date_range('2022-10-05', '2022-10-12', name='times', freq='D') print("原索引:") print(base_idx) n = 5 # 自动提取原索引频率 index_freq = base_idx.freq # 计算未来索引的起始时间:原索引最后一项 + 1个频率步长 start_time = base_idx[-1] + index_freq # 生成n个步长的未来索引 future_idx = pd.date_range(start=start_time, periods=n, freq=index_freq, name=base_idx.name) print("\n未来索引:") print(future_idx)
处理无明确频率的索引
如果你的DatetimeIndex是手动构建或不规则的(此时base_idx.freq会返回None),可以用pd.infer_freq()推断频率:
# 示例:手动创建无明确freq的索引 base_idx = pd.DatetimeIndex(['2022-10-05', '2022-10-06', '2022-10-07']) # 推断频率 index_freq = pd.infer_freq(base_idx) # 生成未来索引 start_time = base_idx[-1] + pd.DateOffset(**{index_freq.lower(): 1}) future_idx = pd.date_range(start=start_time, periods=n, freq=index_freq)
内容的提问来源于stack exchange,提问作者crabulus_maximus
相关产品推荐
相关产品推荐

