从收报机中带有破折号或点的雅虎财经下载数据

Downloading data from yahoo finance with a dash or dot in the ticker

我有这个代码可以从雅虎下载数据:

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

我的预期输出是下载所有股票,即使是那些带有点的股票。任何想法如何规避?

您的问题是雅虎财经不使用“.”。用于跟踪不同 classes 的份额的符号。所以,"BRK.B"和"BR.B"实际上是"BRKB"和"BRB"。

使用 Yahoo Finance python SDK 我制作了一个小脚本来测试 Yahoo Finance 是否可以找到股票代码为 "BRK.B" 或 [=31= 的股票信息].

from yahoo_finance import Share

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

这个结果是:

>>>> None

带点的股票代码用作 shorthand 类型或 class 特定股票。您可以了解更多 here.

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

>>>> 173.05

Berkshire Hathaway class B 股目前的价格是多少。

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

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

您的问题是雅虎财经不使用“.”。跟踪不同 类 份额的符号。所以,“BRK.B”和“BR.B”实际上是“BRKB”和“BRB”。 --- 我的评论:现在“BRK.B”和“BR.B”实际上是“BRK-B”和“BR-B”。