2014-05-13 24 views
7

Pracuję nad książką Wesa McKinneya Python for Data Analysis i na stronie 139 w części Korelacja i kowariancja. Otrzymuję komunikat o błędzie, gdy próbuję uruchomić jego kod w celu uzyskania danych z Yahoo! Finanse.Ładowanie danych z Yahoo! Finanse z pandami

Oto co używam:

#CORRELATION AND COVARIANCE 
import pandas.io.data as web 

all_data = {} 
for ticker in ['AAPL', 'IBM', 'MSFT', 'GOOG']: 
    all_data[ticker] = web.get_data_yahoo(ticker, '1/1/2003', '1/1/2013') 

price = DataFrame({tic: data['Adj Close'] 
        for tic, data in all_data.iteritems()}) 
volume = DataFrame({tic: data['Volume'] 
        for tic, data in all_data.iteritems()}) 

Tutaj jest błąd otrzymuję:

Traceback (most recent call last): 
    File "<stdin>", line 2, in <module> 
    File "C:\Users\eMachine\WinPython-64bit-2.7.5.3\python-2.7.5.amd64\lib\site-packages\pandas\io\data.py", line 390, in get_data_yahoo 
    adjust_price, ret_index, chunksize, 'yahoo', name) 
    File "C:\Users\eMachine\WinPython-64bit-2.7.5.3\python-2.7.5.amd64\lib\site-packages\pandas\io\data.py", line 336, in _get_data_from 
    hist_data = src_fn(symbols, start, end, retry_count, pause) 
    File "C:\Users\eMachine\WinPython-64bit-2.7.5.3\python-2.7.5.amd64\lib\site-packages\pandas\io\data.py", line 190, in _get_hist_yahoo 
    return _retry_read_url(url, retry_count, pause, 'Yahoo!') 
    File "C:\Users\eMachine\WinPython-64bit-2.7.5.3\python-2.7.5.amd64\lib\site-packages\pandas\io\data.py", line 169, in _retry_read_url 
    "return a 200 for url %r" % (retry_count, name, url)) 
IOError: after 3 tries, Yahoo! did not return a 200 for url 'http://ichart.yahoo.com/table.csv?s=GOOG&a=0&b=1&c=2000&d=0&e=1&f=2010&g=d&ignore=.csv' 
>>> ... >>> >>> ... >>> 

Każdy pomysł na czym polega problem?

+5

myślę ticker dla Google zmieniło. Spróbuj: 'GOOGL' –

+0

Nice! @Karl D. Dziękujemy za szybką pomocną odpowiedź! – panterasBox

Odpowiedz

7

Jak zauważył Karl, znacznik zmienił się, co oznacza, że ​​Yahoo zwraca "stronę nie znalezioną".

Gdy dane odpytywania z internetu, jest to dobry pomysł, by zakończyć rozmowę w próbie z wyjątkiem

all_data = {} 
for ticker in ['AAPL', 'IBM', 'MSFT', 'GOOG']: 
    try: 
     all_data[ticker] = web.get_data_yahoo(ticker, '1/1/2003', '1/1/2013') 
     price = DataFrame({tic: data['Adj Close'] 
        for tic, data in all_data.iteritems()}) 
     volume = DataFrame({tic: data['Volume'] 
        for tic, data in all_data.iteritems()}) 
    except: 
     print "Cant find ", ticker 
+0

lepiej również określić typ wyjątku. W tym przypadku będzie to "except IOError:" Zobacz http://stackoverflow.com/questions/14797375/should-i-always-specify-an-exception-type-in-except-statements – datavoredan

+0

Od października 2015 r. Metoda też nie działa –

1

dniem 6/1/17, ja sztukowanych następujące razem z tej strony i kilka innych:

from pandas_datareader import data as web 
# import pandas.io.data as web 
import fix_yahoo_finance 
import datetime 

start = datetime.datetime(2010, 1, 1) 
end = datetime.datetime(2017, 6, 1) 

all_data={} 
for ticker in ['AAPL', 'IBM', 'MSFT', 'GOOGL']: 
    all_data[ticker] = web.get_data_yahoo(ticker, start, end) 

price = DataFrame({tic: data['Adj Close'] 
        for tic, data in all_data.iteritems()}) 
volume = DataFrame({tic: data['Volume'] 
        for tic, data in all_data.iteritems()}) 
Powiązane problemy