更快的 Excel 处理库:python-calamine
笔者工作中经常遇到需要大量处理
.xlsx数据的场景,由于长期以来的技术债,核心的处理库使用的是 pandas。这就导致了在数十万乃至百万级数据的场景下,pandas 处理数据的速度较慢,尤其是在数据写入和读取的核心场景下,瓶颈尤为明显。
python-calamine 简介
python-calamine 是一个 Python 的 Excel 操作库,它基于 Rust 的 calamine,对其进行了二次封装,实现了高效的 Excel 读写。其目标是为 Python 提供一个高效、轻量、纯读取的 Excel 文件解析方案。
其主要特性如下:
支持多种文件格式,如
.xlsx.xls等;读取速度快,内存占用小;
提供直接的 Python API,也可以作为 pandas 的 Excel 读取引擎使用;
无需额外依赖 Microsoft Office 环境。
直接调用
python-calamine 提供了直接的 API 接口,可在 Python 脚本中读取 Excel 文件:
from python_calamine import CalamineWorkbook
# 读取文件
wb = CalamineWorkbook.from_path("data/example.xlsx")
# 获取工作表
sheet = wb.get_sheet_by_name("Sheet1")
# 转换为 Python 原生数据结构
data = sheet.to_python()
# 如果需要保留空白区域
data_full = sheet.to_python(skip_empty_area=False)这种方式比较适合直接读取数据用于后续逻辑处理,比如数据清洗、转换、数据库入库等。
pandas 中调用
如果项目中已经广泛使用 pandas 来处理 Excel 数据,那么迁移到 python-calamine 非常方便。
自 pandas 2.2.0 版本开始,可以通过 engine="calamine" 参数直接调用该引擎,无需修改原有逻辑。
如:
import pandas as pd
# 仅需添加 engine 参数,即可使用 calamine 引擎
df = pd.read_excel("data/example.xlsx", engine="calamine")
print(df.head())只需在原有的 read_excel 调用中添加 engine="calamine",即可让 pandas 在底层使用 Rust 实现的高速解析引擎,而无需改动原有的数据处理逻辑。这对于已有大量基于 pandas 的脚本来说,是一种极低成本的性能优化手段。
一些细节
在实际使用中,仍有一些需要注意的地方:
1.仅支持读取操作
python-calamine 目前只支持读取 Excel 文件,不支持写入、修改或格式化操作。如果需要生成或编辑 Excel 文件,仍需使用 openpyxl 或 xlsxwriter 等库。
目前只支持读取 Excel 文件,不支持写入、修改或格式化操作。如果需要生成或编辑 Excel 文件,仍需使用
2.空白行与列的处理
默认情况下 to_python() 方法会跳过空白区域。如需完整保留表格结构,可通过 skip_empty_area=False 参数控制。
3.pandas 环境要求
若要在 pandas 中使用 engine="calamine",需保证 pandas 版本为 2.2.0 或更高。
总结
对于大量读取 Excel 的场景,python-calamine 提供了一个轻量、高效的替代方案。
它的优势在于:
对现有 pandas 使用方式兼容;
极低的迁移成本;
明显的性能提升,在大文件场景尤其明显。
如果你的项目也像我司一样史山堆积严重,技术栈较为落后,且 Excel 作为强制性刚需,需要长期处理大文件,不妨尝试下 python-calamine。对于在 pandas 侧进行只读、清洗或统计类任务的情况下,python-calamine 确实值得推荐。
本文由人工撰写,使用 AI 进行辅助创作。
This article was written by a human author with the assistance of AI.