在 Pandas Python 中读取 XLSB 文件

问题描述 投票:0回答:6

这方面有很多问题,但关于如何将 xlsb 文件读入 pandas 还没有简单的答案。有没有简单的方法可以做到这一点?

python pandas
6个回答
84
投票

随着 pandas -

1.0.0
January 29, 2020
版本的发布,添加了对二进制 Excel 文件的支持。

import pandas as pd
df = pd.read_excel('path_to_file.xlsb', engine='pyxlsb')

备注:

  • 您需要升级 pandas -
    pip install pandas --upgrade
  • 您需要安装
    pyxlsb
    -
    pip install pyxlsb

36
投票

嗨,其实有一种方法。只需使用 pyxlsb 库即可。

import pandas as pd
from pyxlsb import open_workbook as open_xlsb

df = []

with open_xlsb('some.xlsb') as wb:
    with wb.get_sheet(1) as sheet:
        for row in sheet.rows():
            df.append([item.v for item in row])

df = pd.DataFrame(df[1:], columns=df[0])

更新: 从 pandas 版本 1.0 开始,read_excel() 现在可以通过传递 engine='pyxlsb' 来读取二进制 Excel (.xlsb) 文件

来源:https://pandas.pydata.org/pandas-docs/version/1.0.0/whatsnew/v1.0.0.html


7
投票

Pyxlsb确实是读取xlsb文件的选项,但是相当有限。

我建议使用 xlwings 包,它可以读取和写入 xlsb 文件,而不会丢失 xlsb 文件中的工作表格式、公式等。有大量可用文档。

import pandas as pd
import xlwings as xw

app = xw.App()
book = xw.Book('file.xlsb')
sheet = book.sheets('sheet_name')
df = sheet.range('A1').options(pd.DataFrame, expand='table').value
book.close()
app.kill()

本例中的“A1”是 Excel 表格的起始位置。 要写入 xlsb 文件,只需编写:

sheet.range('A1').value = df

0
投票

如果你想读取一个大的二进制文件或任何具有某些范围的Excel文件,你可以直接输入此代码

range = (your_index_number)
first_dataframe = []
second_dataframe = []
with open_xlsb('Test.xlsb') as wb:
    with wb.get_sheet('Sheet1') as sheet:
        i=0
        for row in sheet.rows():
            if(i!=range):
                first_dataframe.append([item.v for item in row])
                i=i+1
            else:
                second_dataframe.append([item.v for item in row])


first_dataframe = pd.DataFrame(first_dataframe[1:], columns=first[0])
second_dataframe = pd.DataFrame(second_dataframe[:], columns=first.columns)

0
投票

为了能够读取xlsb文件,需要安装openpyxl。

根据https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.read_excel.html#pandas.read_excel

引擎:str,默认无

如果 io 不是缓冲区或路径,则必须设置此项以识别 io。支持的引擎:“xlrd”、“openpyxl”、“odf”、“pyxlsb”。引擎兼容性:

“xlrd”支持旧式 Excel 文件(.xls)。

“openpyxl”支持较新的 Excel 文件格式。

“odf”支持 OpenDocument 文件格式(.odf、.ods、.odt)。

“pyxlsb”支持二进制 Excel 文件。

1.2.0 版本中的更改:xlrd 引擎现在仅支持旧式 .xls 文件。 当engine=None时,将使用以下逻辑来确定引擎:

如果path_or_buffer是OpenDocument格式(.odf、.ods、.odt),则将使用odf。

否则如果path_or_buffer是xls格式,则将使用xlrd。

否则如果安装了openpyxl,则将使用openpyxl。

否则,如果安装了 xlrd >= 2.0,则会引发 ValueError。

否则将使用 xlrd 并引发 FutureWarning。这种情况将在 pandas 的未来版本中引发 ValueError。

不带index_col读取xlsb:

import pandas as pd

dfcluster = pd.read_excel('c:/xml/baseline/distribucion.xlsb', sheet_name='Cluster', index_col=0, engine='pyxlsb')

0
投票

在我的试验中,接受的答案仅从工作簿中检索到一张纸。 正如 Finrod Felagund 的答案 或检索特定工作表一样,按层次结构使用特定工作簿和工作表会更准确。

为了方便使用,如果您想轻松地将 xlsb 转换为 xlsx,我发现 aspose-cells-python 包很容易用于将 xlsb 转换为 xlsx。目前python 3.11版本的环境就足够了。 来源网站

import aspose.cells 
from aspose.cells import Workbook
workbook = Workbook("input.xlsb")
workbook.save("Output.xlsx")
© www.soinside.com 2019 - 2024. All rights reserved.