将一个CSV格式的文件分割成两个CSV文件

本文介绍了一个实用的Python脚本,能够按指定比例将一个大型CSV文件分割为训练集和验证集,适用于数据预处理场景。代码详细展示了如何读取源文件、创建目标文件并写入数据,同时提供了调用函数的具体步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

序言

本项目可以按照比例将一个csv文件分割成两个csv文件,效果是:在C:\algo_file文件夹下,将该文件夹下的data.csv文件分成train.csv和vali.csv

完整代码

定义split_csv函数:

import csv
import os


def split_csv(path, total_len, per):

    # 如果train.csv和vali.csv存在就删除
    if os.path.exists('C:\\algo_file\\train.csv'):
        os.remove('C:\\algo_file\\train.csv')
    if os.path.exists('C:\\algo_file\\vali.csv'):
        os.remove('C:\\algo_file\\vali.csv')

    with open(path, 'r', newline='') as file:
        csvreader = csv.reader(file)
        i = 0
        for row in csvreader:

            if i < round(total_len * per/100):
                # train.csv存放路径
                csv_path = os.path.join("C:\\algo_file", 'train.csv')
                print(csv_path)
                # 不存在此文件的时候,就创建
                if not os.path.exists(csv_path):
                    with open(csv_path, 'w', newline='') as file:
                        csvwriter = csv.writer(file)
                        csvwriter.writerow(row)
                    i += 1
                # 存在的时候就往里面添加
                else:
                    with open(csv_path, 'a', newline='') as file:
                        csvwriter = csv.writer(file)
                        csvwriter.writerow(row)
                    i += 1
            elif (i >= round(total_len * per/100)) and (i < total_len):
            	# vali.csv存放路径
                csv_path = os.path.join("C:\\algo_file", 'vali.csv')
                print(csv_path)
                # 不存在此文件的时候,就创建
                if not os.path.exists(csv_path):
                    with open(csv_path, 'w', newline='') as file:
                        csvwriter = csv.writer(file)
                        csvwriter.writerow(row)
                    i += 1
                # 存在的时候就往里面添加
                else:
                    with open(csv_path, 'a', newline='') as file:
                        csvwriter = csv.writer(file)
                        csvwriter.writerow(row)
                    i += 1
            else:
                break

    print("训练集和验证集分离成功")
    return

调用上述函数:

if __name__ == '__main__':

    path = 'C:\\algo_file\\data.csv'
    total_len = len(open(path, 'r').readlines())# csv文件行数
    per = 80 # 分割比例%

    split_csv(path, total_len, per)

按照训练集占80%(验证集20%)比例,对C:\algo_file文件夹下的data.csv进行分割,在该文件下得到train.csv 和 vali.csv。

最后

本项目只是以C:\algo_file文件夹为例,实际上data.csv所在路径,train.csv所在路径,vali.csv所在路径包括文件名都可以更改。

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值