我有以下代码可从yahoo下载数据:

#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”的数据。

我有一个名为“ stocks”的所有股票的清单,这是我所做的,但是它仍然不显示带有点的股票数据:

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

stocksdot(stocks)


我的预期输出将是下载所有股票,即使其中有一个点。任何想法如何规避?

最佳答案

您的问题是Yahoo Finance不使用“。”标记以跟踪不同类别的份额。因此,“ 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

要绕过它,您可以删除“。”。例如,当我使用“ BRKB”而不是“ BRK.B”时,得到的结果是:

>>>> 173.05


这是伯克希尔哈撒韦B级股票的当前价格。

替换为“。”以编程方式使用Python的.replace()方法。

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

关于python - 从Yahoo Finance下载数据,代码中的破折号或点,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45379155/

10-12 20:06