Pandas Xlrd Engine прошел ошибку по-прежнему значение - PullRequest
0 голосов
/ 12 мая 2018

Я пытаюсь прочитать файл xls с URL:

, используя запросы:

page = requests.get(url) # xls url
df = pd.read_excel(page.content,engine = 'xlrd')  #engine is passed



File "f:\python36\lib\site-packages\pandas\util\_decorators.py", line 118, in wrapper
    return func(*args, **kwargs)
  File "f:\python36\lib\site-packages\pandas\io\excel.py", line 230, in read_excel
    io = ExcelFile(io, engine=engine)
  File "f:\python36\lib\site-packages\pandas\io\excel.py", line 296, in __init__
    raise ValueError('Must explicitly set engine if not passing in'
ValueError: Must explicitly set engine if not passing in buffer or path for io.

# if i put in random engine name it throws an unsupported engine error but with xlrd it throws must set engine

Я попытался сохранить файл и затем прочитать его:

with open('file.xls','wb') as f:
    f.write(page.content)

df = pd.read_excel('file.xls',engine='xlrd')  #this works

РЕДАКТИРОВАТЬ:

Я попытался передать page.text это поднимает:

ValueError: embedded null character

1 Ответ

0 голосов
/ 12 мая 2018

Если первый аргумент pd.read_excel является str, он интерпретируется как путь к файлу (или URL).Если мы хотим передать содержимое файла непосредственно в read_excel, то нам нужно обернуть содержимое в BytesIO, чтобы сделать его похожим на файл объектом:

Поэтому используйте

BytesIO = pd.io.common.BytesIO
df = pd.read_excel(BytesIO(page.content), engine='xlrd')
...