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

Pandas填充NaN为0遇MemoryError,16GB内存Win11环境下如何解决?

解决Pandas填充NaN时的内存错误及内存分配方案

核心原因

你的DataFrame计算后需要约10GiB内存,而16GB物理内存会被系统和其他进程占用一部分,实际可用内存不足以一次性处理整个数据集,因此触发内存错误。以下是具体解决方案:

1. 优化数据类型(最优先)

float64类型每个元素占8字节,将其降级为更低精度的浮点类型可直接减半甚至四分之一内存占用:

  • 如果精度允许,转为float32(占4字节):
    df = df.astype('float32')
    df.fillna(0, inplace=True)
    
  • 若对精度要求极低,可尝试float16(占2字节),但注意可能出现精度损失:
    df = df.astype('float16')
    df.fillna(0, inplace=True)
    
  • 如果数据实际是整数(NaN仅表示缺失),改用Pandas的可空整数类型(如Int32),内存占用远低于float类型:
    df = df.astype('Int32')
    df.fillna(0, inplace=True)
    

2. 分批处理数据集

不一次性加载/处理整个DataFrame,拆分后逐块处理:

  • 若数据来自文件,读取时指定chunksize:
    chunk_size = 10000  # 根据内存情况调整大小
    with pd.read_csv('your_data.csv', chunksize=chunk_size) as reader:
        for idx, chunk in enumerate(reader):
            chunk.fillna(0, inplace=True)
            # 写入处理后的数据
            if idx == 0:
                chunk.to_csv('filled_data.csv', index=False)
            else:
                chunk.to_csv('filled_data.csv', mode='a', header=False, index=False)
    
  • 若DataFrame已加载,手动拆分处理:
    chunk_size = 10000
    processed_chunks = []
    for i in range(0, len(df), chunk_size):
        chunk = df.iloc[i:i+chunk_size].fillna(0)
        processed_chunks.append(chunk)
    df_filled = pd.concat(processed_chunks, axis=0)
    

3. 释放闲置内存

清理当前会话中无用的变量和内存碎片:

import gc

# 删除不需要的变量
del temp_var  # 替换为你的临时变量名
# 强制垃圾回收
gc.collect()

# 整理DataFrame内存碎片(可选)
df = df.copy()

4. 调整Windows虚拟内存

增大页面文件(虚拟内存)让系统可以用硬盘空间补充物理内存:

  1. 右键「此电脑」→「属性」→「高级系统设置」
  2. 切换到「高级」标签,点击「性能」区域的「设置」
  3. 在「性能选项」中选「高级」标签,点击「虚拟内存」区域的「更改」
  4. 取消勾选「自动管理所有驱动器的分页文件大小」
  5. 选择一个剩余空间充足的磁盘,设置「自定义大小」:
    • 初始大小:建议设为物理内存大小(16GB即16384MB)
    • 最大值:可设为32GB(32768MB)或更大(根据硬盘剩余空间)
  6. 点击「设置」→「确定」,重启电脑生效

5. 其他替代方案

  • 使用Dask:它是Pandas的并行扩展,可自动分片处理超出内存的大数据,API与Pandas几乎一致
  • 原地修改数据:用NumPy的nan_to_num直接在原数组上替换NaN,避免额外内存复制:
    import numpy as np
    df.values[:] = np.nan_to_num(df.values, nan=0.0, copy=False)
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 06:15:18