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

基于Date列动态划分DataFrame训练集与测试集的方法问询

基于Date列划分训练集与测试集的解决方案

步骤说明

不用硬编码日期,借助relativedelta可自动处理跨年份的月份计算(比如1月减3个月自动得到前一年的10月),完整流程如下:

  1. 确保Date列为datetime类型
    如果Date列是字符串格式,先转换为datetime类型避免计算出错:
import pandas as pd
from datetime import datetime
from dateutil.relativedelta import relativedelta

# 转换Date列为datetime类型(未转换时执行)
whatever_df['Date'] = pd.to_datetime(whatever_df['Date'])
  1. 获取数据中的最近日期
    从Date列提取最大日期作为时间基准:
latest_date = whatever_df['Date'].max()
  1. 计算划分分界日期
    用relativedelta减去3个月,自动处理跨年、跨月的边界情况:
# 基础分界:最近日期往前推3个月的当天
cutoff_date = latest_date - relativedelta(months=3)

# 若需按自然月整月划分(如示例中以3月1日为分界),调整到当月第一天
cutoff_date = (latest_date - relativedelta(months=3)).replace(day=1)
  1. 划分训练集与测试集
    根据分界日期筛选数据:
# 训练集:早于分界日期的所有行
train_df = whatever_df[whatever_df['Date'] < cutoff_date]

# 测试集:分界日期及之后的所有行(对应示例中2022年3月至6月)
test_df = whatever_df[whatever_df['Date'] >= cutoff_date]

关键说明

  • relativedelta会自动处理月份计算的边界问题,无需手动判断1月、2月的特殊情况,例如:
    • datetime(2023, 1, 31) - relativedelta(months=3) → datetime(2022, 10, 31)
    • datetime(2023, 2, 28) - relativedelta(months=3) → datetime(2022, 11, 28)
  • 如果需要训练集包含截至2022年3月、测试集包含3-6月,通过(latest_date - relativedelta(months=3)).replace(day=1)即可自动算出分界日期,无需硬编码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 13:57:34