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

使用Pandas合并文件中的DataFrame:大内存限制下无法采用常规流程的简便方案问询

处理超大CSV文件合并的内存友好方案

绝对有简便的替代方案!当文件大到装不下内存时,硬怼Pandas的常规流程肯定不行,下面几个方案都是我实际用过的,亲测有效:

1. Pandas分块读取+逐块写入(适合纵向行合并)

这是最贴合你原有Pandas习惯的方案,核心思路是每次只加载一小部分数据到内存,处理完就写入输出文件,循环直到所有数据都处理完。

比如要把两个CSV纵向拼接(行合并),代码示例:

import pandas as pd

# 调整chunk_size到你的内存能承受的大小,比如10万行
chunk_size = 10**5

# 先处理第一个文件,第一块写入时保留表头,后续块追加
with pd.read_csv('file1.csv', chunksize=chunk_size) as reader:
    for idx, chunk in enumerate(reader):
        chunk.to_csv(
            'merged_file.csv',
            mode='w' if idx == 0 else 'a',
            header=idx == 0,
            index=False
        )

# 处理第二个文件,所有块都追加,不写表头
with pd.read_csv('file2.csv', chunksize=chunk_size) as reader:
    for chunk in reader:
        chunk.to_csv(
            'merged_file.csv',
            mode='a',
            header=False,
            index=False
        )

这个方案完全不需要修改原有数据的逻辑,只是把一次性加载改成了分批次处理,内存占用会非常低。

2. 用Dask实现并行合并(适合横向列合并或复杂操作)

如果你的需求是横向合并(比如按主键关联),分块处理会很麻烦,这时候可以用Dask——它是专门为大数据设计的库,语法和Pandas几乎一模一样,但会自动在后台分块、并行处理数据,完全不需要你手动管理内存。

示例代码:

import dask.dataframe as dd

# 读取两个超大CSV,Dask会自动分块
df1 = dd.read_csv('file1.csv')
df2 = dd.read_csv('file2.csv')

# 按主键合并,和Pandas的merge用法完全一致
merged_df = dd.merge(df1, df2, on='你的主键列名', how='inner')  # how可选left/right/outer/inner

# 保存结果,single_file=True确保输出是单个CSV
merged_df.to_csv('merged_file.csv', single_file=True, index=False)

Dask的学习成本极低,如果你会用Pandas,几乎不用学就能上手,而且支持各种复杂的DataFrame操作,不止合并。

3. 用命令行工具快速搞定(适合简单场景)

如果你的需求很简单(纯行合并或简单列合并),直接用命令行工具是最快的,完全不占Python内存,几秒就能完成:

纵向行合并

# 先写入第一个文件的表头
head -n 1 file1.csv > merged_file.csv
# 追加第一个文件除表头外的所有内容
tail -n +2 file1.csv >> merged_file.csv
# 追加第二个文件除表头外的所有内容
tail -n +2 file2.csv >> merged_file.csv

横向列合并(按主键)

先确保安装了csvkit(pip install csvkit),然后:

csvjoin -c 你的主键列名 file1.csv file2.csv > merged_file.csv

这个方案适合不想写代码的场景,处理速度比Python快得多。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 17:59:07