笔者工作中经常遇到需要大量处理 .xlsx 数据的场景,由于长期以来的技术债,核心的处理库使用的是 pandas。这就导致了在数十万乃至百万级数据的场景下,pandas 处理数据的速度较慢,尤其是在数据写入和读取的核心场景下,瓶颈尤为明显。

python-calamine 简介

https://pypi.org/project/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 文件,仍需使用 openpyxlxlsxwriter 等库。

目前只支持读取 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.