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

如何基于数值拆分通过read_csv读取的Pandas时间序列?

时间序列数据拆分的实用方法

Hey there! 看你已经用Pandas读取了这份带日期索引的时间序列数据,要把它拆分成两部分(通常是训练集和测试集对吧?),这里有几种符合时间序列特性的实现方法——记住绝对不能用随机拆分哦,会破坏时序逻辑的:

1. 按比例拆分(最常用)

如果没有特定的时间节点要求,直接按数据量比例拆分是最方便的,比如80%作为训练集,20%作为测试集:

# 计算拆分索引,取前80%作为训练集
split_ratio = 0.8
split_index = int(len(series) * split_ratio)

# 拆分数据
train_data = series[:split_index]
test_data = series[split_index:]

# 可以打印下拆分后的数量验证
print(f"训练集样本数: {len(train_data)}, 测试集样本数: {len(test_data)}")

2. 按指定日期拆分

如果你的业务有明确的时间分割点(比如某一年之后作为测试),利用日期索引直接筛选就好:

# 设定拆分日期,比如2017-01-01
split_date = '2017-01-01'

# 拆分数据
train_data = series[series.index < split_date]
test_data = series[series.index >= split_date]

# 验证拆分结果
print(f"训练集时间范围: {train_data.index.min()} 至 {train_data.index.max()}")
print(f"测试集时间范围: {test_data.index.min()} 至 {test_data.index.max()}")

注:你的数据索引已经是datetime类型了,所以可以直接和字符串日期比较;如果索引还不是datetime类型,先执行series.index = pd.to_datetime(series.index)转换。

3. 按固定样本数拆分

如果你明确知道需要多少样本作为训练/测试,直接用位置索引拆分:

# 比如取前1500条作为训练集
train_data = series.iloc[:1500]
test_data = series.iloc[1500:]

重要提醒

时间序列拆分必须严格保持时序顺序,绝对不能用sklearn.model_selection.train_test_split的默认随机拆分方式,否则会导致未来数据泄露到训练集中,模型评估结果完全失真!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:40:46