2017-07-28 82 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