如何用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
相关产品推荐
相关产品推荐

