Yahoo Finance API / URL not working: Python fix for Pandas DataReader
自2017年5月16日以来,雅虎财务URL一直无法使用熊猫数据阅读器的"雅虎"方法访问。我还没有测试这个修复雅虎财务:https://pypi.python.org/pypi/fix-yahoo-finance,昨天刚刚发布,声明:"雅虎!金融部已经退役了他们的历史数据API"。
编辑2017年8月2日:此后,我按照https://pypi.python.org/pypi/fix-yahoo-finance中的步骤执行:$pip3安装fix-yahoo-finance-upgrade-no cache dir,升级pandas-datareader以与"fix-yahoo-finance 0.0.6"一起使用,并修改代码:
1 2 3 4 | from pandas_datareader import data as pdr import fix_yahoo_finance data = pdr.get_data_yahoo('AAPL', start='2017-04-23', end='2017-05-24') |
请注意,最后两个数据列的顺序是"adj close"和"volume",即不是以前的格式。就我而言,它们只需重置为原始格式:
1 2 | cols = ['Date', 'Open', 'High', 'Low', 'Close', 'Volume', 'Adj Close'] data.reindex(columns=cols) |
号
1 2 3 4 5 | import pandas_datareader.data as pdweb from pandas_datareader import data as pdr import fix_yahoo_finance # must pip install first data = pdr.get_data_yahoo('SPY','2017-05-20','2017-05-23') data = pdr.get_data_yahoo(['SPY','QQQ'],'2017-05-01','2017-05-23', as_panel=False,group_by = 'ticker') |
号
我建议使用quandl。我不确定雅虎收购后是否会可靠。在quandl中,如果有多个符号,则必须循环。阅读文档并执行如下操作:
1 2 3 4 5 6 7 8 9 10 11 12 | import quandl as qdl start_date = '2016-01-01' end_date = '2017-05-22' for symbol in symbols: quandldata = qdl.get_table("WIKI/PRICES",qopts={"columns":["date","adj_close"]}, ticker=symbol, date = {'gte': start_date,'lte' : end_date}) # specify that the quandldata df has index col = 'date' quandldata = quandldata.set_index(["date"], drop=True) # rename col adj close to the respective symbol to prevent clash w/ same name for all cols quandldata = quandldata.rename(columns={'adj_close': symbol}) df = df.join(quandldata) |
我喜欢用户3443068的回答,因为它很简单。
我还建议考虑使用谷歌作为你的源代码,因为考虑到雅虎的发展方向,雅虎实例可能会经历许多不推荐的版本。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | def get_ret(tickers_ls, start_dt, end_dt): #create dataframe df_ret=pd.DataFrame() #get prices for all tickers for tk in tickers: p = wb.DataReader(tk,"google", start_date, end_date).Close df_ret_tmp = p.to_frame()['Close'].reset_index() df_ret_tmp['Ticker']=tk ## append df_ret=df_ret.append(df_ret_tmp) #pivot and get into single dataframe pivoted = df_ret.pivot(index='Date', columns='Ticker') pivoted.columns = pivoted.columns.droplevel(0) return pivoted |
我已经按照https://pypi.python.org/pypi/fix-yahoo-finance中的步骤执行到:$pip3安装fix-yahoo-finance-upgrade-no-cache-dir,还升级了pandas-datareader以确保这一点。
"Fix Yahoo Finance 0.0.6"运行良好,例如bhp.ax:
1 2 3 4 | from pandas_datareader import data as pdr import fix_yahoo_finance data = pdr.get_data_yahoo('BHP.AX', start='2017-04-23', end='2017-05-24') |
请注意,最后两个数据列的顺序是"adj close"和"volume",即不是以前的格式。出于我的目的,它们被重置为原始格式:
1 2 | cols = ['Date', 'Open', 'High', 'Low', 'Close', 'Volume', 'Adj Close'] data.reindex(columns=cols) |
。