Jupyter Notebook加载1.2GB CSV时数组内存分配错误如何解决
加载1.2GB CSV文件内存不足的解决方案
你遇到的报错属于典型的内存不足问题:CSV是文本存储格式,加载到pandas等数据框架中时会转换为内部存储类型,内存占用通常是原文件大小的2~5倍,8GB运行内存除去系统、其他进程的占用,剩余空间不足以承载全量数据,可按以下优先级尝试解决方案:
1. 分块加载数据
- 无需修改其他配置,直接使用pandas
read_csv的chunksize参数分批加载数据,每次仅处理部分数据,无需把全量数据载入内存:
import pandas as pd # 每次加载10万行,可根据实际剩余内存调整数值 chunk_size = 100000 for chunk in pd.read_csv("你的文件路径.csv", chunksize=chunk_size): # 此处编写单块数据的处理逻辑,如过滤、统计聚合等 your_process_logic(chunk)
- 如果需要全量数据的统计结果,可逐块计算后再汇总结果即可。
2. 指定数据类型降低内存占用
- pandas默认会为数值列分配int64、float64等大精度类型,大部分场景下使用小精度类型即可满足需求,可在加载时通过
dtype参数指定列类型,基数较低的字符串列还可以指定为category类型,最高可降低80%的内存占用:
dtype_config = { "整型列名": "int32", "浮点列名": "float32", "低基数字符串列名": "category" } # 还可搭配usecols参数仅加载需要用到的列,进一步减少内存消耗 df = pd.read_csv("你的文件路径.csv", dtype=dtype_config, usecols=["需要用到的列1", "需要用到的列2"])
3. 使用内存优化的第三方库加载
- 可替换pandas为
polars库,该库默认做了大量内存优化,相同数据的内存占用远低于pandas,同时支持懒加载模式,无需一次性将全量数据载入内存:
import polars as pl # 懒加载仅读取文件元数据,不会载入全量数据 df = pl.scan_csv("你的文件路径.csv") # 做完过滤、选列等操作后,仅加载最终需要的结果到内存 result = df.select(["需要的列1", "需要的列2"]).filter(pl.col("过滤列") > 阈值).collect()
4. 扩容虚拟内存
- 你的设备有0.5TB硬盘空间,可调整系统虚拟内存(分页文件)大小,将空闲硬盘空间作为虚拟内存使用,虽然读写速度低于物理内存,但可避免程序直接崩溃:
- Windows系统:进入「系统属性-高级-性能-设置-高级-虚拟内存」手动调整最大值
- macOS/Linux系统:默认会自动分配虚拟内存,若当前分配不足可手动扩容swap分区大小
内容的提问来源于stack exchange,提问作者Niyojita
相关产品推荐
相关产品推荐

