如何不使用sklearn.train_test_split拆分数据集为训练集和测试集
手动拆分Pandas训练集/测试集的解决方法
注意:你现有代码里第一步读取的变量名为data,第二步采样用的变量是dataset,请先统一变量名避免运行报错,以下方案默认你已将读取到的数据集赋值给dataset变量。
方案1:推荐无循环高效实现
该方法不需要手动写校验逻辑,运行效率远高于for循环,适合任意数据量场景:
- 采样训练集时建议固定随机种子,保证每次运行拆分结果可复现:
random_training = dataset.sample(n=75, random_state=42) - 直接通过删除训练集索引的方式获取测试集:
random_testing = dataset.drop(random_training.index)
执行完成后random_testing就是剩余25行的测试集DataFrame,可直接用于后续数据处理。
方案2:按需求的for循环实现
如果你必须通过for循环校验索引的逻辑来实现,可参考以下代码:
- 初始化空列表存储测试集数据
random_testing = [] - 遍历原数据集索引逐一校验:
for idx in dataset.index: # 判断当前索引是否不在训练集的索引列表中 if idx not in random_training.index: # 符合条件的行加入测试集列表 random_testing.append(dataset.loc[idx]) # 可选:将列表转为Pandas DataFrame格式方便后续处理 random_testing = pd.DataFrame(random_testing)
完整可运行代码示例
import pandas as pd # 读取Excel数据集 dataset = pd.read_excel('file.xlsx') # 随机抽取75行作为训练集 random_training = dataset.sample(n=75, random_state=42) # 获取测试集 random_testing = dataset.drop(random_training.index) # 验证拆分结果 print(f"训练集行数:{len(random_training)}") print(f"测试集行数:{len(random_testing)}")
内容的提问来源于stack exchange,提问作者dritech
相关产品推荐
相关产品推荐

