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

合并15个CSV生成大DataFrame后内存占用29GB,如何释放冗余内存?

解决大CSV合并后冗余内存无法释放的问题

问题根源

你当前的代码存在两个核心问题:

  1. 变量删除方式错误:del [[df1, df2,...]]仅删除了临时创建的列表对象,并未删除df1到df15这些独立的DataFrame变量,它们仍在占用内存。
  2. 加载逻辑低效:一次性加载15个大DataFrame再合并,会瞬间占用大量冗余内存,加重内存压力。

分步解决方案

1. 修复当前内存释放操作

如果已经加载了所有15个DataFrame,用以下代码正确释放冗余内存:

import gc

# 逐个删除每个DataFrame变量
del df1, df2, df3, df4, df5, df6, df7, df8, df9, df10, df11, df12, df13, df14, df15
# 强制触发垃圾回收
gc.collect()

执行后冗余内存会被系统回收,内存占用将回落至仅保留total_df的水平。

2. 从根源优化合并逻辑(推荐)

下次处理时,不要一次性加载所有文件,改为逐文件加载并追加到总DataFrame,内存中始终只保留当前加载的单个文件和合并后的总数据:

import pandas as pd
import gc

# 初始化空的总DataFrame
total_df = pd.DataFrame()

# 遍历15个CSV文件
for file_num in range(1, 16):
    file_path = f"test{file_num}.csv"
    # 加载单个文件
    temp_df = pd.read_csv(file_path)
    # 追加到总数据
    total_df = pd.concat([total_df, temp_df], ignore_index=True)
    # 立即删除临时DataFrame并回收内存
    del temp_df
    gc.collect()

这种方式能把内存峰值控制在单个文件+总数据的规模,避免一次性加载15个文件的内存过载。

3. 进一步压缩总数据内存(可选)

针对你的数据规模(百万行、千余列),通过优化数据类型可大幅降低内存占用,为后续PCA等操作预留空间:

# 浮点列转float32(精度足够的话,内存占用减半)
float_cols = total_df.select_dtypes(include=['float64']).columns
total_df[float_cols] = total_df[float_cols].astype('float32')

# 整型列按需缩小类型(比如int64转int32/int16,根据数值范围判断)
int_cols = total_df.select_dtypes(include=['int64']).columns
total_df[int_cols] = total_df[int_cols].astype('int32')

# 字符串列转category(如果重复值占比高,可大幅节省内存)
str_cols = total_df.select_dtypes(include=['object']).columns
total_df[str_cols] = total_df[str_cols].astype('category')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 02:01:01