我有这个代码从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”的数据。
我有一个名为“股票”的所有股票的清单,这是我所做的,但它仍然没有显示其中有点的股票的数据:
def stocksdot(stocks):
stocks_dash = str(stocks).replace('.','-')
stockslist = stocks_dash.split(',')
return stockslist
stocksdot(stocks)
我的预期输出是下载所有股票,即使是那些有点的股票。任何想法如何规避?
答案 0 :(得分:1)
您的问题是雅虎财务没有使用"。"用于跟踪不同类别的份额的符号。所以," BRK.B"和" BR.B"实际上是" BRKB"和" BRB"。
使用雅虎财经python SDK我制作了一个小脚本来测试雅虎财经是否可以通过自动收报机找到有关股票的信息" BRK.B"或者" BR.B"。
from yahoo_finance import Share
stock = Share('BRK.B')
print(stock.get_price())
结果是:
>>>> None
其中带有点的股票代码用作特定股票的类型或类别的简写。您可以了解更多here。
绕过它似乎可以删除"。"。例如,当我使用" BRKB"而不是" BRK.B"我得到了结果:
>>>> 173.05
Berkshire Hathaway B级股票的现价是多少。
替换"。"以编程方式使用Python的.replace()方法。
for stock in stocks:
stock = stock.replace(".", "") # Replaces all "." with "" in the string
# stock
答案 1 :(得分:0)
您的问题是Yahoo Finance不使用“”。跟踪不同类别的份额的符号。因此,“ BRK.B”和“ BR.B”实际上是“ BRKB”和“ BRB”。 ---我的评论:现在“ BRK.B”和“ BR.B”实际上是“ BRK-B”和“ BR-B”。