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

合并百个Pandas DataFrame时如何节省内存?

解决Pandas合并多表内存不足的方案

Pandas的pd.concat()本身没有inplace参数,无法实现原地合并来避免内存复制。不过可以通过以下几种内存友好的方式,跳过磁盘中转完成合并:

1. 逐个合并并即时释放内存

每次只加载一张表,合并到主DataFrame后立刻删除临时表,触发垃圾回收释放内存,避免同时持有大量临时DataFrame。

示例代码:

import pandas as pd
import gc

# 替换为你的表文件路径列表
file_list = ["table1.csv", "table2.csv", ..., "table100.csv"]

# 初始化空的主DataFrame
main_df = pd.DataFrame()

for file in file_list:
    # 读取单张表(根据文件格式换read_excel/read_parquet等)
    temp_df = pd.read_csv(file)
    # 合并到主表
    main_df = pd.concat([main_df, temp_df], ignore_index=True)
    # 删除临时表并释放内存
    del temp_df
    gc.collect()

这种方式下,内存中始终只保留主DataFrame和当前正在处理的临时表,内存占用远低于一次性加载所有表。

2. 用Dask DataFrame分块处理

Dask是专门处理大数据量的并行计算库,它会分块加载数据,不会一次性把所有数据放入内存,最后可以转换为Pandas DataFrame(只要总数据量能装下内存)。

示例代码:

import dask.dataframe as dd

# 读取所有文件(支持csv、excel等多种格式,自动分块)
dask_df = dd.read_csv(file_list)  # 对应格式用read_excel/read_parquet等
# 将Dask DataFrame转换为Pandas DataFrame
main_df = dask_df.compute()

Dask会自动处理分块合并,全程内存占用可控,适合数据量接近内存上限的场景。

3. 优化数据类型减少内存占用

在读取单表时,通过指定更紧凑的数据类型,降低单个DataFrame的内存消耗,间接减少合并时的内存压力:

  • 将字符串列转为category类型(如果列的唯一值占比低)
  • 数值类型降级:比如int64转int32/int8,float64转float32(需确保数据范围支持)

示例代码:

# 自定义数据类型映射
dtype_config = {
    "status": "category",
    "user_id": "int32",
    "amount": "float32"
}

temp_df = pd.read_csv(file, dtype=dtype_config)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 02:06:16