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

如何仅读取一次Excel并为不同工作表设置不同read_csv_options?

单次读取Excel文件并为不同工作表应用个性化参数

问题背景

我有同一个Excel文件里的2个工作表,需要用不同的读取参数。目前的做法是分别读取两次:

df1 = pl.read_excel(path, sheet_name='sheet1', read_csv_options={'skip_rows': 2})
df2 = pl.read_excel(path, sheet_name='sheet2', read_csv_options={'infer_schema_length': 2000})

但重复读取同一个文件效率极低,想知道能不能只读取一次文件,再给每个工作表单独应用读取选项?另外我不太熟悉惰性操作,有没有相关方案?之前试过给read_csv_options传列表,但没生效:

pl.read_excel(
    path, sheet_name=['Base', 'Data_Funds'], read_csv_options=[{'infer_schema_length': 2000}, {'skip_rows': 2}]
)

解决方案

Polars的read_excel暂时不支持直接给多个工作表对应传递参数列表,但可以借助第三方库先一次性加载Excel文件,再分别读取工作表并应用参数,彻底避免重复磁盘IO:

步骤1:依赖准备

如果是读取.xlsx格式文件,需要先安装openpyxl:

pip install openpyxl

如果是.xls格式,改用xlrd即可。

步骤2:单次加载+分表读取

import polars as pl
from openpyxl import load_workbook

# 一次性加载整个Excel文件到内存(只读模式更高效)
wb = load_workbook(path, read_only=True)

# 为每个工作表单独指定读取参数
df1 = pl.read_excel(wb, sheet_name='sheet1', read_csv_options={'skip_rows': 2})
df2 = pl.read_excel(wb, sheet_name='sheet2', read_csv_options={'infer_schema_length': 2000})

# 读取完成后关闭工作簿释放资源
wb.close()

补充说明

  • 为什么传列表参数不行?:Polars的read_csv_options是全局参数,会统一应用到所有指定的工作表,不支持按工作表分别传参,所以你之前的尝试无法生效。
  • 关于惰性操作:Polars的惰性API(LazyFrame)主要用于延迟执行后续的数据处理逻辑,减少中间内存占用,但读取Excel本身属于即时IO操作,因此上面的“单次加载+分表读取”是更直接解决你效率问题的方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 00:47:09