我使用面板数据:随着时间的推移,我观察了许多单位(例如人);对于每个单元,我都有相同固定时间间隔的记录。
当将数据分成训练集和测试集时,我们需要确保两个集是不相交的和顺序的,即训练集中的最新记录应该在测试集中最早的记录之前(参见例如这篇博客文章)。
面板数据是否有任何标准的 Python 交叉验证实现?
我试过 Scikit-Learn 的TimeSeriesSplit,它不能考虑组,GroupShuffleSplit不能考虑数据的顺序性质,见下面的代码。
import pandas as pd
import numpy as np
from sklearn.model_selection import GroupShuffleSplit, TimeSeriesSplit
# generate panel data
user = np.repeat(np.arange(10), 12)
time = np.tile(pd.date_range(start='2018-01-01', periods=12, freq='M'), 10)
data = (pd.DataFrame({'user': user, 'time': time})
.sort_values(['time', 'user'])
.reset_index(drop=True))
tscv = TimeSeriesSplit(n_splits=4)
for train_idx, test_idx in tscv.split(data):
train = data.iloc[train_idx]
test = data.iloc[test_idx]
train_end = train.time.max().date()
test_start = test.time.min().date()
print('TRAIN:', train_end, '\tTEST:', test_start, '\tSequential:', train_end < test_start, …Run Code Online (Sandbox Code Playgroud) time-series python-3.x scikit-learn cross-validation panel-data
我有某种格式的数据,我想将其读入 pandas.DataFrame 中。有些行给我一个错误。下面是这些字符串之一的最小示例,但我有几个它不起作用的地方(奇怪的是有些它起作用的地方)。
确切的错误是:
OutOfBoundsDatetime,越界纳秒时间戳:2276-02-18 05:15:13
import pandas as pd
pd.to_datetime('02/18/2276 5:15:13 AM', format='%m/%d/%Y %I:%M:%S %p')
Run Code Online (Sandbox Code Playgroud)
我用这个网站来制作我的格式字符串: https://pandas.pydata.org/pandas-docs/stable/ generated/pandas.Period.strftime.html
我很感激任何帮助!