问题
Yahoo Finance URL has not been accessible using the Pandas DataReader's "yahoo" method since 16 May 2017. I have yet to test this fix-yahoo-finance: https://pypi.python.org/pypi/fix-yahoo-finance that was posted just yesterday, with the statement: "Yahoo! finance has decommissioned their historical data API".
EDIT August 2, 2017: I have since followed the steps in https://pypi.python.org/pypi/fix-yahoo-finance to: $ pip3 install fix_yahoo_finance --upgrade --no-cache-dir, upgraded pandas_datareader to work with "fix-yahoo-finance 0.0.6", and amended codes:
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')
Note that the order of the last 2 data columns are 'Adj Close' and 'Volume' ie. not the previous format. For my purpose, they are simply reset to the original format:
cols = ['Date', 'Open', 'High', 'Low', 'Close', 'Volume', 'Adj Close']
data.reindex(columns=cols)
回答1:
I would recommend using Quandl. I'm not sure if Yahoo is going to be reliable after their acquisition. In Quandl if you have multiple symbols you have to loop. Read the docs and do something like this:
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)
回答2:
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')
回答3:
I have followed the steps in https://pypi.python.org/pypi/fix-yahoo-finance to: $ pip3 install fix_yahoo_finance --upgrade --no-cache-dir and also upgraded pandas_datareader to be sure.
The "fix-yahoo-finance 0.0.6" worked well, for example BHP.AX:
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')
Note that the order of the last 2 data columns are 'Adj Close' and 'Volume' ie. not the previous format. For my purpose, they are reset to the original format:
cols = ['Date', 'Open', 'High', 'Low', 'Close', 'Volume', 'Adj Close']
data.reindex(columns=cols)
回答4:
I like user3443068 answer as it's simple.
I also would suggest looking at using Google as your source as the yahoo instance is probably going to go through many deprecated versions given where the company's going.
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://stackoverflow.com/questions/44112403/yahoo-finance-api-url-not-working-python-fix-for-pandas-datareader