在Pandas Python中读取XLSB文件

时间:2017-07-10 19:01:39

标签: python pandas

关于这个问题有很多问题,但是关于如何将xlsb文件读入pandas并没有简单的答案。有一个简单的方法吗?

5 个答案:

答案 0 :(得分:31)

随着1.0.0发行的熊猫-January 29, 2020,增加了对二进制Excel文件的支持。

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

注意:

  • 您将需要升级熊猫-pip3 install pandas --upgrade
  • 您将需要安装pyxlsb-pip3 install pyxlsb

答案 1 :(得分:20)

实际上,有一种方法。只需使用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])

答案 2 :(得分:0)

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

答案 3 :(得分: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)

答案 4 :(得分: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')