如何按观测序号划分Pandas数据集为训练集(0-40)与测试集(40-71)
按索引划分Pandas数据集的实用方法
既然你需要固定索引范围的划分(而非随机抽样),直接用Pandas的索引筛选或位置索引就能搞定,以下是具体实现:
方法1:按索引值筛选
假设你的X和y的索引是0到71的连续整数,直接根据索引范围提取即可:
# 训练集:索引0到40的所有观测(包含40) X_train = X.loc[X.index <= 40] y_train = y.loc[y.index <= 40] # 测试集:索引40到71的所有观测(包含40和71) X_test = X.loc[(X.index >= 40) & (X.index <= 71)] y_test = y.loc[(y.index >= 40) & (y.index <= 71)]
如果你的索引不是连续整数,但你知道训练/测试集对应的具体索引列表,也可以直接传列表筛选:
# 手动定义索引范围 train_indices = list(range(0, 41)) # 0到40(共41个样本) test_indices = list(range(40, 72)) # 40到71(共32个样本) X_train = X.loc[train_indices] y_train = y.loc[train_indices] X_test = X.loc[test_indices] y_test = y.loc[test_indices]
方法2:按行位置划分(iloc)
如果你的数据是按时间顺序排好的(前2个月在前,最后1个月在后),用位置索引iloc更直接:
# 训练集:前41行(位置0到40,iloc是左闭右开,所以写:41) X_train = X.iloc[:41] y_train = y.iloc[:41] # 测试集:从第40行到第71行(包含两端,所以写40:72) X_test = X.iloc[40:72] y_test = y.iloc[40:72]
小提醒
- 如果不想让训练集和测试集有重叠(比如索引40的样本只属于测试集),把测试集的起始索引改成41就行,比如
X_test = X.loc[X.index >= 41] - 确保
X和y的索引是完全对齐的,这样筛选出来的特征和标签才不会对应错
内容的提问来源于stack exchange,提问作者ty101
相关产品推荐
相关产品推荐

