如何用Polars实现与pd.ExcelFile相同的效果?
如何用Polars实现与pd.ExcelFile相同的效果?
我完全懂你的需求——你想用Polars复刻pandas里pd.ExcelFile的功能,而不是直接用pl.read_excel返回单个DataFrame对吧?毕竟pd.ExcelFile是个能操作整个Excel文件的对象,能轻松获取所有sheet名称、按需读取不同sheet,处理多sheet文件时特别方便。
其实Polars虽然没有直接提供和pd.ExcelFile完全对应的类,但我们用几个简单的方法就能实现一模一样的效果,甚至更灵活:
1. 先获取所有Sheet名称(对应pd.ExcelFile的.sheet_names)
Polars专门提供了get_sheet_names方法,可以直接从你的BytesIO对象里提取所有sheet的名称,不需要提前读取整个文件:
from polars.io.excel import get_sheet_names # 从你的BytesIO对象里获取所有sheet名称 sheet_names = get_sheet_names(excel_data) print(sheet_names) # 输出类似 ["Sheet1", "SalesData", "Report2024"]
2. 按需读取指定Sheet(对应pd.ExcelFile的.parse())
拿到sheet名称后,你可以随时用pl.read_excel指定要读取的sheet,就像用pd.ExcelFile.parse()一样:
# 读取第一个sheet df_first_sheet = pl.read_excel(excel_data, sheet_name=sheet_names[0]) # 或者直接指定sheet的名字 df_sales = pl.read_excel(excel_data, sheet_name="SalesData")
3. 一次性读取所有Sheet(对应遍历pd.ExcelFile的所有sheet)
如果你想一次性把所有sheet都读成DataFrame的字典,直接给pl.read_excel的sheet_name参数传None就行,返回的结果是键为sheet名、值为对应DataFrame的字典:
# 一次性读取所有sheet,返回字典 all_sheets = pl.read_excel(excel_data, sheet_name=None) # 遍历字典处理每个sheet for sheet_name, df in all_sheets.items(): print(f"处理Sheet: {sheet_name}") # 这里写你的处理逻辑
4. 封装成类,完全复刻pd.ExcelFile的用法
如果你特别习惯pd.ExcelFile的对象式调用方式,也可以自己封装一个简单的类,用法和pandas几乎完全一致:
from polars.io.excel import get_sheet_names import polars as pl class PolarsExcelFile: def __init__(self, file): self.file = file # 初始化时就获取所有sheet名称 self.sheet_names = get_sheet_names(file) def parse(self, sheet_name): # 读取指定sheet的DataFrame return pl.read_excel(self.file, sheet_name=sheet_name) # 现在你可以像用pd.ExcelFile一样用它了! result1 = PolarsExcelFile(excel_data) print(result1.sheet_names) # 查看所有sheet名 df = result1.parse("Sheet1") # 读取指定sheet
这样不管是想获取sheet列表、按需读取还是批量处理,都能实现和pd.ExcelFile一模一样的效果,而且Polars的读取性能通常还会比pandas更好哦~
备注:内容来源于stack exchange,提问作者ninja_minida
相关产品推荐
相关产品推荐

