You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

实测openpyxl结合pandas比pd.read_excel慢,求解析差异原因

为什么Openpyxl手动转DataFrame比pd.read_excel慢?

以下是导致测试结果与文章结论相悖的核心原因:

  • Openpyxl加载了整个工作簿而非仅目标工作表
    你的代码中openpyxl.load_workbook(myfile)会解析Excel文件的全部内容,包括另外两个小型数据透视表的结构、格式元数据,即便你只需要读取"data"工作表。而pd.read_excel在指定sheet_name="data"时,底层会仅解析目标工作表的数据,跳过其他工作表的加载流程,节省了大量非必要的解析时间。

  • 未启用Openpyxl的只读模式
    Openpyxl默认以读写模式(read_only=False)加载工作簿,这种模式会将整个文件的所有内容(包括单元格样式、格式、透视表对象等)加载到内存,对于包含大工作表的文件来说开销极大。启用只读模式(read_only=True)后,Openpyxl会采用流式读取方式,无需将整个工作簿加载到内存,速度会显著提升。同时搭配data_only=True可直接读取单元格的计算结果而非公式,进一步减少解析开销。

  • Python循环的低效性
    你手动通过for row in worksheet.iter_rows(...)循环并逐个append到列表的方式,在数据量较大时会因Python解释器的循环开销变慢。而pd.read_excel底层依赖优化后的解析逻辑(如Openpyxl的底层高效接口)批量处理数据,避免了Python层面的循环损耗。


优化后的Openpyxl基准测试代码

import time
import pandas as pd
import openpyxl

# Benchmarking optimized openpyxl and pandas
start = time.time()
workbook = openpyxl.load_workbook(myfile, read_only=True, data_only=True)
worksheet = workbook['data']
rows = list(worksheet.iter_rows(values_only=True))
df = pd.DataFrame(rows[1:], columns=rows[0])
workbook.close()  # 只读模式下需手动关闭工作簿
end = time.time()
print(f"Optimized openpyxl and pandas took {end - start:.2f} seconds")

内容的提问来源于stack exchange,提问作者Achille G

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 08:40:32