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

如何用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 16:42:57