Листы книги Excel из URL-адреса в `pandas.DataFrame`

Посмотрев на различные способы чтения ссылки url, указав на файл .xls, я решил пойти с помощью xlrd.

Мне сложно преобразовать тип 'xlrd.book.Book' в 'pandas.DataFrame'

У меня есть следующее:

import pandas
import xlrd 
import urllib2

link ='http://www.econ.yale.edu/~shiller/data/chapt26.xls'
socket = urllib2.urlopen(link)

#this line gets me the excel workbook 
xlfile = xlrd.open_workbook(file_contents = socket.read())

#storing the sheets
sheets = xlfile.sheets()

Я хочу взять последний лист sheets и импортировать как pandas.DataFrame, любые идеи относительно того, как я могу это сделать? Я пробовал, pandas.ExcelFile.parse(), но ему нужен путь к файлу excel. Я могу, конечно, сохранить файл в памяти, а затем проанализировать (используя tempfile или что-то еще), но я стараюсь следовать рекомендациям pythonic и использовать функциональные возможности, которые, вероятно, уже записаны в pandas.

Любое руководство очень ценится, как всегда.

Ответ 1

Вы можете передать свой socket в ExcelFile:

>>> import pandas as pd
>>> import urllib2
>>> link = 'http://www.econ.yale.edu/~shiller/data/chapt26.xls'
>>> socket = urllib2.urlopen(link)
>>> xd = pd.ExcelFile(socket)
NOTE *** Ignoring non-worksheet data named u'PDVPlot' (type 0x02 = Chart)
NOTE *** Ignoring non-worksheet data named u'ConsumptionPlot' (type 0x02 = Chart)
>>> xd.sheet_names
[u'Data', u'Consumption', u'Calculations']
>>> df = xd.parse(xd.sheet_names[-1], header=None)
>>> df
                                   0   1   2   3         4
0        Average Real Interest Rate: NaN NaN NaN  1.028826
1    Geometric Average Stock Return: NaN NaN NaN  0.065533
2              exp(geo. Avg. return) NaN NaN NaN  0.067728
3  Geometric Average Dividend Growth NaN NaN NaN  0.012025

Ответ 2

Вы можете передать URL-адрес pandas.read_excel():

import pandas as pd

link ='http://www.econ.yale.edu/~shiller/data/chapt26.xls'
data = pd.read_excel(link,'sheetname')