2017-07-28 93 views
1

我有這樣的代碼從雅虎下載數據:下載數據

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

它工作正常,但我最近發現一個問題,它不會下載數據股票「BRK.B」和「BR.B」。

我都稱爲「股」的股票名單,這裏是我做了什麼,但它仍然沒有w代表個股呈現數據/點在其中:

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

stocksdot(stocks) 

我的預期輸出將是下載所有的股票,即使是在他們中有點的股票。任何想法如何規避?

+0

請提供一個完整的[MVCE](https://stackoverflow.com/help/mcve)以幫助您更輕鬆。 – albert

回答

1

您的問題是雅虎財務不使用「。」符號來追蹤不同類別的股票。所以,「BRK.B」和「BR.B」實際上是「BRKB」和「BRB」。

使用Yahoo Finance python SDK我做了一個腳本來測試Yahoo Finance是否可以通過股票代碼「BRK.B」或「BR.B」找到關於股票的信息。

from yahoo_finance import Share 

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

這導致是:

>>>> None 

股票行情,在他們點被用作特定股票的類型或等級的簡寫。您可以瞭解更多here

爲了規避它,看起來你可以刪除「。」。例如,當我使用的,而不是「BRK.B」「BRKB」我得到的結果是:

>>>> 173.05 

這是伯克希爾哈撒韋公司B類股票的當前價格。

替換「。」以編程方式使用Python的.replace()方法。

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

感謝這似乎工作,但我的股票是在一個列表中,它說替換不能用於名單 –

+0

請參閱我的編輯。您只需循環列表中的每個股票並調用個別股票的替換。如果它回答了您的問題,請註冊並標記爲已接受。 – ecarlin