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

如何基于索引从主数据集剔除测试集生成训练集(不使用train_test_split)

问题:从主数据集中剔除测试集得到训练集(不使用train_test_split)

需求说明

现有10行的主数据集,已随机抽取3行作为test_data,要求不使用train_test_split()方法,通过从主数据集中剔除测试数据集,得到7行的train_data。


数据定义代码

import pandas as pd
import numpy as np

data = pd.DataFrame({'job_title':np.random.choice(['data_science','Data_analysis'],10),
              'level':np.random.choice(['entry','senior'],10),
              'salary':np.random.choice((80000),10)})

主数据集示例

job_title   level   salary
0   Data_analysis   senior  33929
1   Data_analysis   senior  45698
2   data_science    senior  33607
3   Data_analysis   senior  65818
4   Data_analysis   senior  66095
5   Data_analysis   entry   4718
6   data_science    senior  74770
7   data_science    entry   3707
8   data_science    senior  26820
9   Data_analysis   entry   23887

测试数据集生成代码

test_data = data.sample(3, random_state=17)
test_data

测试数据集示例

job_title   level   salary
7   Data_analysis   senior  27174
2   data_science    senior  58579
5   data_science    senior  26554

解决方法

核心是利用行索引进行筛选,以下两种方法均可实现:

方法1:布尔索引筛选

# 筛选出索引不在test_data索引中的行
train_data = data[~data.index.isin(test_data.index)]

解释:test_data.index获取测试集的行索引,data.index.isin()判断主数据集每行的索引是否属于测试集,~符号取反,最终得到所有不在测试集中的行。

方法2:drop方法删除测试集行

# 直接删除test_data对应的索引行
train_data = data.drop(test_data.index)

解释:drop()方法接受索引列表作为参数,直接从主数据集中删除这些索引对应的行,剩余的就是训练集。


期望训练数据集示例

job_title   level             salary
0   Data_analysis   senior            20003
1   data_science    entry             28083
3   Data_analysis   senior            12906
4   data_science    senior            45588
6   Data_analysis   senior            59851
8   Data_analysis   senior            52008
9   data_science    entry             32207

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 04:43:38