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

如何解决Pandas中出现的内存不足(out of memory)错误?

解决重复读取CSV时内存不足的问题

可能的原因及对应解决方案

1. 强制释放前一次读取的内存

Python的垃圾回收机制不会立即彻底释放已删除对象的内存,尤其是在交互式环境(如Jupyter Notebook)中,残留的内存占用会导致二次读取时OOM。可以手动触发回收:

import gc

# 删除之前的DataFrame变量
del df
# 强制执行垃圾回收
gc.collect()
# 重新读取数据
df = pd.read_csv('ip.csv', encoding='cp1252')

2. 从读取阶段压缩内存占用

即使第一次读取显示仅17.1MB,内存碎片或进程占用可能导致二次读取失败,直接优化读取时的内存开销:

  • 指定列的精确数据类型:避免pandas自动推断出冗余的大类型(比如将int64改为int32,字符串列改为category类型):
    先查看各列的类型分布:
    sample_df = pd.read_csv('ip.csv', encoding='cp1252', nrows=100)
    print(sample_df.dtypes)
    
    再手动指定类型读取:
    dtype_config = {
        'user_id': 'int32',
        'status': 'category',
        'score': 'float32'
        # 根据实际列补充配置
    }
    df = pd.read_csv('ip.csv', encoding='cp1252', dtype=dtype_config)
    
  • 仅读取需要的列:直接跳过不需要的列,减少加载的数据量:
    required_cols = ['user_id', 'status', 'score']  # 替换为你需要的列名
    df = pd.read_csv('ip.csv', encoding='cp1252', usecols=required_cols)
    

3. 分块读取CSV文件

如果CSV文件存在隐藏的大内容(比如某些行有异常长的文本),分块读取可以避免一次性加载全部数据:

# 按10000行一块读取
chunk_generator = pd.read_csv('ip.csv', encoding='cp1252', chunksize=10000)

# 逐块处理并合并
processed_chunks = []
for chunk in chunk_generator:
    # 对块做预处理,比如删除无用列
    chunk = chunk.drop(columns=['unused_col1', 'unused_col2'])
    processed_chunks.append(chunk)

df = pd.concat(processed_chunks, ignore_index=True)

4. 检查系统内存占用

二次读取失败可能是其他进程占用了大量内存,导致可用空间不足。可以通过系统工具排查:

  • Linux/macOS:终端执行free -h查看内存使用情况,关闭不必要的进程
  • Windows:打开任务管理器,结束占用内存较高的非必要进程

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 09:35:21