如何高效利用pandas分块读取处理10GB CSV文件,Python实现?
- 内容介绍
- 文章标签
- 相关推荐
本文共计939个文字,预计阅读时间需要4分钟。
读取10GB+的CSV文件时,直接使用`pandas.read_csv()`默认将整个文件加载进内存,可能导致内存消耗迅速上升至20GB以上,进而引发系统OOM错误或卡死。为避免这种情况,可以采用以下方法:
根本原因不是pandas慢,而是它默认的「全量加载 + 类型自动推断」策略在大文件上完全不适用——类型推断需要扫描全部数据,而内存里存不下。
- 避免使用
dtype='category'或infer_datetime_format=True等加重推断负担的参数 - 显式指定
dtype(比如把所有数字列设为'float32'而非默认'float64')能减少30%~50%内存占用 - 禁用索引:
index_col=False,除非你真要用某列当索引
分块读取的核心参数怎么设才不翻车
chunksize 不是越大越好,也不是越小越稳。设成 50000 行(约 5–8MB 内存/块)是多数场景的甜点值:太小会导致I/O次数过多、Python循环开销占比上升;太大仍可能单块爆内存,尤其字段含长文本时。
关键是要配合 usecols 和 dtype 一起用,否则分块没意义——光读100列中的5列,但每块还是按100列解析,内存照样涨。
本文共计939个文字,预计阅读时间需要4分钟。
读取10GB+的CSV文件时,直接使用`pandas.read_csv()`默认将整个文件加载进内存,可能导致内存消耗迅速上升至20GB以上,进而引发系统OOM错误或卡死。为避免这种情况,可以采用以下方法:
根本原因不是pandas慢,而是它默认的「全量加载 + 类型自动推断」策略在大文件上完全不适用——类型推断需要扫描全部数据,而内存里存不下。
- 避免使用
dtype='category'或infer_datetime_format=True等加重推断负担的参数 - 显式指定
dtype(比如把所有数字列设为'float32'而非默认'float64')能减少30%~50%内存占用 - 禁用索引:
index_col=False,除非你真要用某列当索引
分块读取的核心参数怎么设才不翻车
chunksize 不是越大越好,也不是越小越稳。设成 50000 行(约 5–8MB 内存/块)是多数场景的甜点值:太小会导致I/O次数过多、Python循环开销占比上升;太大仍可能单块爆内存,尤其字段含长文本时。
关键是要配合 usecols 和 dtype 一起用,否则分块没意义——光读100列中的5列,但每块还是按100列解析,内存照样涨。

