2013-03-23 39 views
10

Sau khi xem các cách khác nhau để đọc liên kết url, trỏ đến tệp .xls, tôi quyết định sử dụng xlrd.trang tính Excel Workbook từ một URL vào một `pandas.DataFrame`

Tôi gặp một thời gian khó khăn chuyển đổi một 'xlrd.book.Book' loại đến một 'pandas.DataFrame'

Tôi đã điều sau đây:

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

Tôi muốn tak bảng cuối cùng của sheets và nhập dưới dạng pandas.DataFrame, bất kỳ ý tưởng nào về cách tôi có thể thực hiện việc này? Tôi đã thử, pandas.ExcelFile.parse() nhưng nó muốn một đường dẫn đến một tập tin excel. Tôi chắc chắn có thể lưu các tập tin vào bộ nhớ và sau đó phân tích (sử dụng tempfile hoặc một cái gì đó), nhưng tôi đang cố gắng làm theo hướng dẫn pythonic và chức năng sử dụng có khả năng đã được viết vào gấu trúc.

Mọi hướng dẫn đều được đánh giá cao như mọi khi.

Trả lời

23

Bạn có thể vượt qua bạn 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 
+1

Perfect, cảm ơn rất nhiều cho câu trả lời rõ ràng và kịp thời. – benjaminmgross

0

Bạn có thể vượt qua một URL để pandas.read_excel():

import pandas as pd 

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