Невозможно прочитать файл xlsb, используя pandas - PullRequest
0 голосов
/ 10 февраля 2020

Я пытаюсь прочитать файл xlsb из локальной сети, используя pandas 'read_excel, но получаю ошибку. Мой код:

import pandas as pd
df3 = pd.read_excel('a.xlsb', engine = 'pyxlsb')

Ошибка:

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-17-06db88cb2446> in <module>
----> 1 pd.read_excel('a.xlsb', engine='pyxlsb')

/usr/local/lib/python3.5/dist-packages/pandas/util/_decorators.py in wrapper(*args, **kwargs)
    186                 else:
    187                     kwargs[new_arg_name] = new_arg_value
--> 188             return func(*args, **kwargs)
    189         return wrapper
    190     return _deprecate_kwarg

/usr/local/lib/python3.5/dist-packages/pandas/util/_decorators.py in wrapper(*args, **kwargs)
    186                 else:
    187                     kwargs[new_arg_name] = new_arg_value
--> 188             return func(*args, **kwargs)
    189         return wrapper
    190     return _deprecate_kwarg

/usr/local/lib/python3.5/dist-packages/pandas/io/excel.py in read_excel(io, sheet_name, header, names, index_col, parse_cols, usecols, squeeze, dtype, engine, converters, true_values, false_values, skiprows, nrows, na_values, keep_default_na, verbose, parse_dates, date_parser, thousands, comment, skip_footer, skipfooter, convert_float, mangle_dupe_cols, **kwds)
    348 
    349     if not isinstance(io, ExcelFile):
--> 350         io = ExcelFile(io, engine=engine)
    351 
    352     return io.parse(

/usr/local/lib/python3.5/dist-packages/pandas/io/excel.py in __init__(self, io, engine)
    644             engine = 'xlrd'
    645         if engine not in self._engines:
--> 646             raise ValueError("Unknown engine: {engine}".format(engine=engine))
    647 
    648         # could be a str, ExcelFile, Book, etc.

ValueError: Unknown engine: pyxlsb

Отлично работает для файлов csv и xlsx.

python версия: 3.5.2 pandas версия: 0.24.2

Ответы [ 2 ]

1 голос
/ 11 февраля 2020

Сначала установите pyxlsb и запустите приведенный ниже код. После выполнения кода ваши данные будут храниться в df1.

pip install pyxlsb

import pandas as pd
from pyxlsb import open_workbook

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

df1 = pd.DataFrame(df[1:], columns=df[0])
0 голосов
/ 19 февраля 2020

После более подробного изучения проблемы и обращения к комментарию @Datanovice у меня получится, если я обновлюсь до pandas v1.0. Я использую Ubuntu 16.04, которая может автоматически обновлять мой python до 3,5, а не дальше, и pandas v1.0 поддерживается с python 3.6. Следовательно, даже после обновления с последними версиями я не смог запустить код. Мы можем установить python 3.6 и установить pandas v1.0 для этого.

sudo add-apt-repository ppa:deadsnakes/ppa
sudo apt-get update
sudo apt-get install python3.6

Используя pandas 3.6, мы можем просто передать движок как pyxlsb в read_excel для чтения файла.

import pandas as pd
df3 = pd.read_excel('a.xlsb', engine = 'pyxlsb')

Ссылка для установки python3 .6 в Ubuntu 16.04: https://askubuntu.com/questions/865554/how-do-i-install-python-3-6-using-apt-get

...