web-dev-qa-db-fra.com

L'API/URL de Yahoo Finance ne fonctionne pas: correctif Python pour Pandas DataReader

L'URL de Yahoo Finance n'est plus accessible à l'aide de la méthode "yahoo" de Pandas DataReader depuis le 16 mai 2017. Je n'ai pas encore testé ce correctif-yahoo-finance: https://pypi.python.org/pypi/fix-yahoo- finance qui a été publié hier: "Yahoo! finance a mis hors service leur API de données historiques".

ÉDITER 2 août 2017: Depuis, j'ai suivi les étapes de https://pypi.python.org/pypi/fix-yahoo-finance à: $ pip3 install fix_yahoo_finance --upgrade --no-cache-dir , amélioré pandas_datareader pour fonctionner avec "fix-yahoo-finance 0.0.6" et les codes modifiés:

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')

Notez que l'ordre des 2 dernières colonnes de données est "Fermé Adj" et "Volume", c'est-à-dire. pas le format précédent. Pour ce faire, ils sont simplement réinitialisés au format d'origine:

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

J'ai suivi les étapes décrites dans https://pypi.python.org/pypi/fix-yahoo-finance to: $ pip3 install fix_yahoo_finance --upgrade --no-cache-dir et également mis à niveau pandas_datareader pour en être sûr .

Le "fix-yahoo-finance 0.0.6" a bien fonctionné, par exemple 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')

Notez que l'ordre des 2 dernières colonnes de données est "Fermé Adj" et "Volume", c'est-à-dire. pas le format précédent. Pour mon but, ils sont réinitialisés au format d'origine:

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

Je recommanderais d'utiliser Quandl. Je ne sais pas si Yahoo sera fiable après leur acquisition. Dans Quandl, si vous avez plusieurs symboles, vous devez boucler. Lisez les docs et faites quelque chose comme ceci:

    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

J'aime user3443068 répondre comme c'est simple.

Je suggérerais également de considérer l'utilisation de Google comme source car l'instance yahoo va probablement passer par de nombreuses versions obsolètes, dans la mesure où l'entreprise se dirige. 

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