Python时间序列预测:如何自动划分训练集与测试集(固定取最后12个月为测试集)
Python时间序列预测:如何自动划分训练集与测试集(固定取最后12个月为测试集)
嗨,刚入门时间序列和编程的话,手动数索引划分数据集确实挺麻烦的,完全理解你想要自动化这个步骤的需求!
你的数据是时间作为索引、搭配一个数值列的结构,其实不用硬编码行数,我们可以利用时间索引的特性来自动锁定最后12个月的数据作为测试集,两种常用方法给你参考:
方法一:基于时间戳筛选(最稳妥,适配所有时间粒度数据)
这个方法不依赖数据的行数,只看时间索引,哪怕你的数据是日度、周度或者有缺失月份,都能准确取到最后12个月的数据,通用性最强。
首先要确保你的索引是datetime类型(如果还没转换的话,先做这一步),然后计算测试集的起始时间,再拆分:
import pandas as pd # 确保时间索引是datetime格式(如果原始索引不是的话执行这行) df1.index = pd.to_datetime(df1.index) # 计算测试集的起始日期:取数据中最晚的日期,往前推12个月 test_start = df1.index.max() - pd.DateOffset(months=12) # 划分训练集和测试集 train = df1[df1.index < test_start] test = df1[df1.index >= test_start]
方法二:基于位置索引(仅适用于规整的月度数据)
如果你的数据是严格按月汇总、每个月只有一行、没有缺失月份的规整数据,那可以直接用位置索引来快速拆分,代码更简洁:
# 训练集:除了最后12行之外的所有数据 train = df1.iloc[:-12] # 测试集:最后12行(对应最后12个月) test = df1.iloc[-12:]
⚠️ 注意:如果你的数据有缺失月份、或者是日度/周度数据,这个方法就会出错(比如最后12行可能对应不到完整的12个月),所以优先推荐方法一。
这样不管你的数据后续有没有更新(比如新增了几个月的数据),代码都能自动适配,不用再手动数行数调整索引啦~
备注:内容来源于stack exchange,提问作者NewbieJon
相关产品推荐
相关产品推荐

