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

为何pandas.read_excel()设置nrows=10无法加速读取XLSX文件?

问题原因与解决方案

你的推测完全正确——XLSX格式的结构导致pandas.read_excel()默认无法通过nrows参数提前终止读取,这也是设置nrows=10后耗时依然和读取全表一致的核心原因。

核心原因

XLSX是基于XML的压缩格式,工作表的所有数据被打包在一个连续的XML流中。pandas默认使用的openpyxl引擎,读取时会先完整解析整个工作表的XML内容到内存,再根据nrows参数截取前N行返回。也就是说,nrows只是在数据加载完成后做截断,并没有减少底层的解析工作量,所以耗时和读全表几乎无差。而CSV是行式文本格式,读取时可以读到指定行数就直接停止,因此nrows能有效提速。

快速读取指定行数的解决方案

1. 用openpyxl只读模式逐行读取(最高效)

直接借助openpyxl的只读模式,手动读取前N行,避免解析全表:

from openpyxl import load_workbook
import pandas as pd

# 以只读模式加载工作簿,避免加载全表到内存
wb = load_workbook("your_large_file.xlsx", read_only=True)
ws = wb.active

# 读取前10行(包含表头)
rows = []
for idx, row in enumerate(ws.iter_rows(values_only=True)):
    rows.append(row)
    if idx >= 9:  # 索引从0开始,取前10行就停在第9个索引
        break

# 转成DataFrame
df = pd.DataFrame(rows[1:], columns=rows[0])
wb.close()

2. 结合chunksize参数分块读取

用pandas的chunksize分块读取,只取第一个块(即前N行):

# 设置chunksize等于你需要的行数
chunk_iterator = pd.read_excel("your_large_file.xlsx", chunksize=10)
df = next(chunk_iterator)  # 只获取第一个chunk,即前10行

这种方法利用pandas的分块迭代器,底层会逐块读取数据,比直接用nrows更高效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 11:36:28