[英]Yahoo Finance API / URL not working: Python fix for Pandas DataReader
自2017年5月16日以來,使用Pandas DataReader的“雅虎”方法無法訪問Yahoo Finance URL。我還沒有測試此修復程序 - 雅虎財務: https : //pypi.python.org/pypi/fix-yahoo-finance昨天發布的聲明是:“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”和修改后的代碼:
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')
請注意,最后2個數據列的順序是“Adj Close”和“Volume”,即。 不是以前的格式。 為了我的目的,他們只需重置為原始格式:
cols = ['Date', 'Open', 'High', 'Low', 'Close', 'Volume', 'Adj Close']
data.reindex(columns=cols)
我建議使用Quandl。 我不確定雅虎收購后是否會變得可靠。 在Quandl中,如果你有多個符號,你必須循環。 閱讀文檔並執行以下操作:
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)
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')
我已經按照https://pypi.python.org/pypi/fix-yahoo-finance中的步驟執行:$ pip3 install fix_yahoo_finance --upgrade --no-cache-dir並且還升級了pandas_datareader以確保。
“fix-yahoo-finance 0.0.6”運作良好,例如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')
請注意,最后2個數據列的順序是“Adj Close”和“Volume”,即。 不是以前的格式。 為了我的目的,他們被重置為原始格式:
cols = ['Date', 'Open', 'High', 'Low', 'Close', 'Volume', 'Adj Close']
data.reindex(columns=cols)
我喜歡user3443068的答案,因為它很簡單。
我也建議使用谷歌作為你的來源,因為雅虎實例可能會經歷許多已棄用的版本,考慮到公司的發展方向。
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.