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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 16:08:08