2017-07-28 6 views
1

j'ai ce code pour télécharger des données de Yahoo:Téléchargement des données de la finance yahoo avec un tiret ou point dans le symbole

#gets data from yahoo finance 
stocks = list(newmerge.index) 
start = dt.datetime(2012,1,1) 
end = dt.datetime.today() 

yahoodata = pdr.get_data_yahoo(stocks,start,end) 
cleanData = yahoodata.loc['Adj Close'] 
dataFrame = pd.DataFrame(cleanData, columns=stocks) 

Il fonctionne très bien, mais je remarque un problème récemment, il ne télécharge pas de données pour stocks "BRK.B" et "BR.B".

J'ai une liste de tous les stocks appelés « stocks », et voici ce que je l'ai fait, mais il ne montre pas encore de données pour les stocks w/points en eux

def stocksdot(stocks): 
stocks_dash = str(stocks).replace('.','-') 
stockslist = stocks_dash.split(',') 
return stockslist 

stocksdot(stocks) 

Mon attendu la sortie serait de télécharger tous les stocks, même ceux avec un point en eux. Des idées pour contourner?

+0

Veuillez fournir un [MVCE] entièrement fonctionnel (https://stackoverflow.com/help/mcve) afin de vous faciliter la tâche. – albert

Répondre

1

Votre problème est Yahoo Finance n'utilise pas le "." notation pour suivre les actions de différentes classes. Donc, "BRK.B" et "BR.B" sont en fait "BRKB" et "BRB". Utilisation du Yahoo Finance python SDK J'ai fait un petit script pour tester si Yahoo Finance pouvait trouver des informations sur un stock avec le ticker "BRK.B" ou "BR.B".

from yahoo_finance import Share 

stock = Share('BRK.B') 
print(stock.get_price()) 

Il en résulte est:

>>>> None 

cours de la Bourse avec un point en eux sont utilisés comme un raccourci pour un type ou une classe d'un stock spécifique. Vous pouvez en apprendre plus sur here.

Pour contourner, il semble que vous pouvez supprimer le ".". Par exemple, lorsque je l'utilise « BRKB » au lieu de « BRK.B » Je reçois le résultat:

>>>> 173.05 

Quel est le prix actuel de l'action de classe B de Berkshire Hathaway.

Pour remplacer le "." utiliser par programme la méthode .replace() de Python.

for stock in stocks: 
    stock = stock.replace(".", "") # Replaces all "." with "" in the string 
           # stock 
+0

Merci cela semble fonctionner, mais mes stocks sont dans une liste, et il dit remplacer ne peut pas être utilisé sur la liste –

+0

S'il vous plaît voir mon édition. Vous avez juste besoin de boucler chaque stock dans la liste et d'appeler le remplacement sur le stock individuel. S'il vous plaît upvote et marquer comme accepté s'il a répondu à votre question. – ecarlin