Python读取Excel报表内存不足,如何通过指定列和dtype引擎优化降维?
- 内容介绍
- 文章标签
- 相关推荐
本文共计1224个文字,预计阅读时间需要5分钟。
基本原因不是文件太大,而是使用`read_excel`默认将整个表(含隐藏列、空行、样式缓存、共享字符串等)全量填充进内存,再转换为`DataFrame对象。您只想取其中的3列,可以先解析前200列,再筛选。
典型表现:MemoryError 报错堆栈里一定有 openpyxl 或 xlrd 的调用链;任务管理器能看到 Python 进程内存飙升到几 GB 后崩掉。
- openpyxl 引擎对格式支持最全,但内存开销最大,尤其含合并单元格或条件格式时
- xlrd(仅 ≤1.2.0)已停止维护,不支持 .xlsx 新格式,但读纯数据时比 openpyxl 省约 30% 内存
- 使用
engine='odf'或engine='calamine'(需 pip install calamine-python)可跳过 XML 解析层,直接提取原始值,内存占用下降 50%+,但会丢弃所有样式和公式
只读指定列:usecols 参数的三种写法与陷阱
usecols 是最直接的降维手段,但它不是“选哪几列就读哪几列”,而是“先按规则筛列名/列号,再读”。错误用法反而会加重负担。
本文共计1224个文字,预计阅读时间需要5分钟。
基本原因不是文件太大,而是使用`read_excel`默认将整个表(含隐藏列、空行、样式缓存、共享字符串等)全量填充进内存,再转换为`DataFrame对象。您只想取其中的3列,可以先解析前200列,再筛选。
典型表现:MemoryError 报错堆栈里一定有 openpyxl 或 xlrd 的调用链;任务管理器能看到 Python 进程内存飙升到几 GB 后崩掉。
- openpyxl 引擎对格式支持最全,但内存开销最大,尤其含合并单元格或条件格式时
- xlrd(仅 ≤1.2.0)已停止维护,不支持 .xlsx 新格式,但读纯数据时比 openpyxl 省约 30% 内存
- 使用
engine='odf'或engine='calamine'(需 pip install calamine-python)可跳过 XML 解析层,直接提取原始值,内存占用下降 50%+,但会丢弃所有样式和公式
只读指定列:usecols 参数的三种写法与陷阱
usecols 是最直接的降维手段,但它不是“选哪几列就读哪几列”,而是“先按规则筛列名/列号,再读”。错误用法反而会加重负担。

