2013-03-23 9 views
10

Po przejrzeniu różnych sposobów czytania linku URL, wskazując plik .xls, zdecydowałem się użyć xlrd.arkusze skoroszytu programu Excel z adresu URL na `pandas.DataFrame`

Mam trudny czas konwersji typu „xlrd.book.Book” do „pandas.DataFrame”

Mam następujący:

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() 

chcę tak ostatni arkusz z sheets i importować jako pandas.DataFrame, wszelkie pomysły, w jaki sposób mogę to zrobić? Próbowałem, pandas.ExcelFile.parse(), ale chce ścieżki do pliku excel. Mogę z pewnością zapisać plik w pamięci, a następnie przeanalizować (przy użyciu tempfile lub coś podobnego), ale staram się postępować zgodnie z pythonic wytycznych i użyć funkcji prawdopodobnie już napisane w pandy.

Wszelkie wskazówki są bardzo doceniane, jak zawsze.

Odpowiedz

23

Można zdać socket do 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 
+1

Perfect, dzięki bardzo za jasną i szybką odpowiedź. – benjaminmgross

0

Można przekazać adres URL do pandas.read_excel():

import pandas as pd 

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