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

解析6000个CSV文件遇内存不足,求60GB数据集合并ML训练方案

解决60GB CSV文件合并的内存友好方案

方案1:逐行读写(最直接的内存友好方式)

全程不加载整个文件到内存,仅逐行读取写入,避免内存耗尽。核心逻辑是保留第一个文件的表头,后续文件跳过表头后逐行追加。

import os

csv_files = ["file1.csv", "file2.csv", ...]  # 替换为你的文件列表
output_file = "bigdata.csv"

# 写入第一个文件的完整内容(包含表头)
with open(output_file, "w", encoding="utf-8") as out_f:
    if csv_files:
        with open(csv_files[0], "r", encoding="utf-8") as first_f:
            out_f.write(first_f.read())
        # 处理剩余文件,跳过表头后逐行写入
        for f in csv_files[1:]:
            print(f"处理文件:{f}")
            with open(f, "r", encoding="utf-8") as in_f:
                next(in_f)  # 跳过第一行表头
                for line in in_f:
                    out_f.write(line)

注意:如果CSV无表头或表头格式不统一,需调整逻辑(比如统一写入自定义表头)。

方案2:Pandas分块读取+追加写入

如果后续要衔接Pandas的ML训练流程,可分块读取每个CSV,逐块写入目标文件,既保留数据处理能力,又不占满内存。

import pandas as pd

csv_files = ["file1.csv", "file2.csv", ...]
output_file = "bigdata.csv"

first_file = True
for f in csv_files:
    print(f"处理文件:{f}")
    # 按10000行分块,chunksize可根据内存情况调整
    for chunk in pd.read_csv(f, chunksize=10000):
        if first_file:
            chunk.to_csv(output_file, index=False, mode="w")
            first_file = False
        else:
            chunk.to_csv(output_file, index=False, mode="a", header=False)

方案3:命令行工具(Linux/macOS环境)

用shell命令直接合并,速度更快,完全不占用Python内存:

# 提取第一个文件的表头,再追加所有文件的内容(跳过每个文件的表头)
head -n 1 file1.csv > bigdata.csv && tail -q -n +2 *.csv >> bigdata.csv

注意:文件名含特殊字符时,需先整理文件列表避免命令出错。

ML训练额外建议

若合并后文件仍过大,无法直接加载训练:

  • 用Dask替代Pandas,它支持分块处理大型数据集,API与Pandas兼容,适合并行化ML训练。
  • 将合并后的CSV转为Parquet格式,压缩比更高且支持列存储,后续训练可仅加载所需列,大幅节省内存。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 17:25:14