Pandas DataReader处理RemoteError雅虎财务

时间:2018-02-01 21:05:07

标签: python pandas yahoo-finance pandas-datareader

我正在使用以下代码将大型代码列表解析为yahoo datareader,我正在尝试按照以下方式获取数据帧。如果列表很大,我经常会返回一个RemoteError,但每次都会在不同的代码上。我不知道如何处理RemoteError,我很高兴放弃滚动条并继续列表中的下一个滚动条。但是,我想再次尝试获得关闭的股票代码数据。我认为使用for循环并添加时间延迟将有助于雅虎请求,但我仍然收到远程错误。有什么想法吗?

 IBM   MSFT   ORCL    TSLA   YELP
Date                                           
2014-01-02  184.52  36.88  37.61  150.10  67.92
2014-01-03  185.62  36.64  37.51  149.56  67.66
2014-01-06  184.99  35.86  37.36  147.00  71.72
2014-01-07  188.68  36.14  37.74  149.36  72.66
2014-01-08  186.95  35.49  37.61  151.28  78.42

import pandas_datareader.data as web
import datetime as dt
import pandas as pd
import time
from pandas_datareader._utils import RemoteDataError

Which_group = ['Accident & Health Insurance'] ##<<<<put in group here
df = pd.read_csv('/home/ross/Downloads/UdemyPairs/stocks1.csv')
df.set_index('categoryName', inplace = True)
df1 = df.loc[Which_group]
tickers = df1.Ticker.tolist()
print(tickers)



#tickers = ['SPY', 'AAPL', 'MSFT'] # add as many tickers
start = dt.datetime(2013, 1,1)
end = dt.datetime.today()

# Function starts here
def get_previous_close(strt, end, tick_list, this_price):
    """ arg: `this_price` can take str Open, High, Low, Close, Volume"""
    #make an empty dataframe in which we will append columns
    adj_close = pd.DataFrame([])
    # loop here. 
    for idx, i in enumerate(tick_list):
        try:
#        time.sleep(0.01)
            total = web.DataReader(i, 'yahoo', strt, end)
            adj_close[i] = total[this_price]
        except RemoteDataError:
            pass


    return adj_close

#call the function
print(get_previous_close(start, end, tickers, 'Adj Close'))

1 个答案:

答案 0 :(得分:0)

也许你可以看看这个问题。这提出了一个可能适合您的解决方案。

Pandas Dataframe - RemoteDataError - Python