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

如何通过pandas冒号切片合并多段区间数据构造自定义训练集

按指定索引拆分训练集、测试集实现方案

需求为取位置索引40-80区间的数据作为测试集,合并[:40]、[80:]两个区间作为训练集,可通过以下两种方式实现:

  • 方法1:拼接切片
    用pandas内置的concat方法直接拼接训练集对应的两个片段即可,和原生切片逻辑完全一致:

    import pandas as pd
    
    # 测试集取40-80位置数据,pandas切片遵循左闭右开规则,实际包含40到79位共40条数据
    X_test = x.iloc[40:80]
    y_test = y.iloc[40:80]
    
    # 拼接前后两段作为训练集
    X_train = pd.concat([x.iloc[:40], x.iloc[80:]])
    y_train = pd.concat([y.iloc[:40], y.iloc[80:]])
    

    所有切片统一用.iloc[]实现,是为了兼容行索引非默认连续整数的场景,避免直接用[]按标签切片导致的取数错误,写法更稳妥。如果需要调整测试集区间,直接修改切片的起止数值即可,比如取50-80作为测试集时,对应把测试集切片改为x.iloc[50:80],训练集拼接的两个片段改为x.iloc[:50]、x.iloc[80:]即可。

  • 方法2:布尔掩码筛选
    数据量较大时推荐用该方法,无需拼接操作,运行效率更高:

    import numpy as np
    
    # 生成和数据集行数一致的布尔数组,测试集对应位置标记为True
    test_mask = np.zeros(len(x), dtype=bool)
    test_mask[40:80] = True
    
    # 按掩码直接筛选对应集合
    X_test = x[test_mask]
    y_test = y[test_mask]
    X_train = x[~test_mask] # ~为按位取反,即筛选所有不属于测试集的行
    y_train = y[~test_mask]
    

    该方法不会改变原数据的行顺序,逻辑更直观,调整测试集区间时只需要修改test_mask的切片范围即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 01:36:29