如何仅读取一次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
相关产品推荐
相关产品推荐

