pandas按照 某类别 等比例划分test集

df = pd.read_csv('data4000.csv')   # 读取数据
test = pd.DataFrame()              # 划分出的test集合
train = pd.DataFrame()             # 剩余的train集合
tags = df['标签'].unique().tolist() # 按照该标签进行等比例抽取


for tag in tags:
    for i in ['Y','N']:
        # 随机选取0.2的数据
        data = df[(df['标签'] == tag) & (df['是否'] == i)]
        sample = data.sample(int(0.2*len(data)))
        sample_index = sample.index
        # 剩余数据
        all_index = data.index
        residue_index = all_index.difference(sample_index) # 去除sample之后剩余的数据
        residue = data.loc[residue_index]  # 这里要使用.loc而非.iloc
        # 保存
        test = pd.concat([test, sample], ignore_index=True)
        train = pd.concat([train, residue], ignore_index=True)

        
# 保存为tab分隔的文本
test.to_csv('test.tsv',sep='\t',index=False)
train.to_csv('train.tsv',sep='\t',index=False)

>>> len(df), len(test),len(train)
(4946, 972, 3974)
  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器
可以使用 pandas 库来读取 csv 文件,然后使用 sklearn 库的 train_test_split 函数来划分训练和测试。 假设你的 csv 文件长这个样子: ``` category,feature1,feature2,feature3,label A,1,2,3,1 B,4,5,6,0 A,7,8,9,1 C,10,11,12,0 ``` 代码如下: ```python import pandas as pd from sklearn.model_selection import train_test_split # 读取 csv 文件 data = pd.read_csv("your_file.csv") # 获取类别列表 categories = data["category"].unique() # 定义训练和测试比例 train_ratio = 0.8 test_ratio = 0.2 # 分别对每个类别进行处理 for category in categories: # 获取该类别的数据 category_data = data.loc[data["category"] == category] # 获取数据和标签 X = category_data[["feature1", "feature2", "feature3"]] y = category_data["label"] # 划分训练和测试 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=test_ratio) # 根据训练和测试比例,进一步划分训练和验证 X_train, X_val, y_train, y_val = train_test_split(X_train, y_train, test_size=1 - train_ratio) # 输出划分结果 print(f"Category {category}:") print(f"Train set: {X_train.shape}, {y_train.shape}") print(f"Validation set: {X_val.shape}, {y_val.shape}") print(f"Test set: {X_test.shape}, {y_test.shape}") ``` 上面代码的输出结果类似于: ``` Category A: Train set: (1, 3), (1,) Validation set: (1, 3), (1,) Test set: (1, 3), (1,) Category B: Train set: (1, 3), (1,) Validation set: (1, 3), (1,) Test set: (1, 3), (1,) Category C: Train set: (1, 3), (1,) Validation set: (1, 3), (1,) Test set: (1, 3), (1,) ``` 其中,每个类别的训练、验证和测试的大小都是根据训练和测试比例计算出来的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值