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

如何用Python按指定日期范围拆分DataFrame为训练集与测试集

如何按指定日期范围拆分Pandas DataFrame?

没问题,这是时间序列建模里非常常见的需求,刚好你的日期字段已经是date对象类型,处理起来很直接,我给你一步步来:

首先要提个小细节:你写的2018年2月31日是不存在的哦,2018年不是闰年,2月只有28天,我下面的代码会用2018-02-28作为训练集的结束日期,避免报错~

具体实现代码

import pandas as pd
from datetime import date

# 假设你的DataFrame名为df,日期字段是'date'(如果字段名不同,替换成你的实际字段名)
# 定义训练集和测试集的日期边界
train_start = date(2016, 3, 1)
train_end = date(2018, 2, 28)  # 修正了2月的错误日期
test_start = date(2018, 3, 1)
test_end = date(2018, 3, 31)

# 用布尔索引拆分训练集
train_df = df[(df['date'] >= train_start) & (df['date'] <= train_end)]

# 拆分测试集
test_df = df[(df['date'] >= test_start) & (df['date'] <= test_end)]

关键说明

  • 因为你的日期字段是Python原生的date对象类型,所以直接和datetime.date实例做比较完全兼容,不需要额外做格式转换,非常省心。
  • 如果之后你需要把日期字段转换成pandas的datetime64类型(有时候做时间序列分析更方便),只需要把日期边界换成pd.Timestamp就行,逻辑是一样的:
    train_start = pd.Timestamp('2016-03-01')
    train_end = pd.Timestamp('2018-02-28')
    

验证拆分结果

拆分完之后可以简单验证一下范围是否正确:

print("训练集日期范围:", train_df['date'].min(), "→", train_df['date'].max())
print("测试集日期范围:", test_df['date'].min(), "→", test_df['date'].max())

这样就能确保训练集和测试集完全符合你想要的时间范围啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 11:00:12