web-dev-qa-db-ja.com

Yahoo Finance API / URLが機能しない:Python Pandas DataReader

2017年5月16日以降、Yahoo FinanceURLにPandas DataReaderの「yahoo」メソッドを使用してアクセスできません。この修正はまだテストしていません-yahoo-finance: https:// pypi .python.org/pypi/fix-yahoo-finance 昨日投稿されたもので、「Yahoo!financeは履歴データAPIを廃止しました」というステートメントが含まれています。

編集2017年8月2日:それ以来、 https://pypi.python.org/pypi/fix-yahoo-finance の手順に従いました:$ pip3 install fix_yahoo_finance --upgrade --no- cache-dir、「fix-yahoo-finance 0.0.6」で動作するようにpandas_datareaderをアップグレードし、コードを修正しました。

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つのデータ列の順序は「AdjClose」と「Volume」であることに注意してください。以前の形式ではありません。私の目的では、それらは単に元の形式にリセットされます。

cols = ['Date', 'Open', 'High', 'Low', 'Close', 'Volume', 'Adj Close']
data.reindex(columns=cols)
4
artDeco

https://pypi.python.org/pypi/fix-yahoo-finance の手順に従いました:$ pip3 install fix_yahoo_finance --upgrade --no-cache-dirそして、pandas_datareaderもアップグレードしました念の為。

「fix-yahoo-finance0.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つのデータ列の順序は「AdjClose」と「Volume」であることに注意してください。以前の形式ではありません。私の目的のために、それらは元の形式にリセットされます:

cols = ['Date', 'Open', 'High', 'Low', 'Close', 'Volume', 'Adj Close']
data.reindex(columns=cols)
0
artDeco
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
user3443068

Quandlの使用をお勧めします。 Yahooが買収後に信頼できるかどうかはわかりません。 Quandlでは、複数のシンボルがある場合はループする必要があります。 docs を読んで、次のようにします。

    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
P Stout

シンプルなのでuser3443068の答えが好きです。

また、yahooインスタンスは、会社がどこに行くのかを考えると、おそらく多くの非推奨バージョンを通過するため、ソースとしてGoogleを使用することを検討することをお勧めします。

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
0
Trexion Kameha