Yahoo Finance API / URL无法正常工作:Pandas DataReader的Python修复程序

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)