首页 > 解决方案 > 如何拆分时间数据(格式为 yyyy-mm-dd hh:mm:ss)来测试和训练集?

问题描述

我有一个时间序列数据,时间为“ yyyy-mm-dd hh:mm:ss”格式。我想将我的行分成训练集和测试集。但我试图做到这一点的所有方法都失败了。

如何将以下数据拆分为测试集和训练集:

DATE-TIME          TEMP     PRE
2018-08-4 15:18:49 209.3851 4045.4414
2018-08-4 15:18:50 209.3851 4045.4314
2018-08-4 15:18:51 209.3581 4045.4268
2018-08-4 15:18:52 209.3553 4045.4343
2018-08-4 15:18:53 209.3553 4045.4307
...

下面的代码不起作用:

...
split_date = pd.Timestamp('2018-08-4 15:18:52')

train = data.loc[:split_date]
test = data.loc[split_date:]
...

标签: pythonpandasdataframetime-series

解决方案


我假设您的时间戳已排序,因此您可以使用

split_date = pd.Timestamp('2018-08-4 15:18:52')

train = df[df['DATE-TIME'] < split_date]
test = df[df['DATE-TIME'] > split_date]

结果:

火车:

DATE-TIME   TEMP    PRE
0   2018-08-04 15:18:49 209.3851    4045.4414
1   2018-08-04 15:18:50 209.3851    4045.4314
2   2018-08-04 15:18:51 209.3581    4045.4268

测试:

DATE-TIME   TEMP    PRE
4   2018-08-04 15:18:53 209.3553    4045.4307

也许您必须先将您的列类型转换为日期时间格式:

df['DATE-TIME'] = pd.to_datetime(df['DATE-TIME'])

如果您的时间戳是索引而不是数据框的列,只需替换df['DATE-TIME']df.index

df.index = pd.to_datetime(df.index)

split_date = pd.Timestamp('2018-08-4 15:18:52')

train = df[df.index < split_date]
test = df[df.index > split_date]

作为替代方案,您可以查看TimeSeriesSplitsklearn.


推荐阅读