Python 如何遍历pandas datareader并为每个股票行情器创建多个数据帧?
我想从股票代码名列表中迭代创建多个数据帧 下面是我引用的堆栈溢出帖子: 我很难理解如何做到这一点,我觉得我遗漏了什么或误解了什么 我写了下面的清单和字典Python 如何遍历pandas datareader并为每个股票行情器创建多个数据帧?,python,dataframe,sqldatareader,stock,stocks,Python,Dataframe,Sqldatareader,Stock,Stocks,我想从股票代码名列表中迭代创建多个数据帧 下面是我引用的堆栈溢出帖子: 我很难理解如何做到这一点,我觉得我遗漏了什么或误解了什么 我写了下面的清单和字典 list_of_tickers = ['BAC','C','GS','JPM','MS','WFC'] dict_of_tickers = {name: pd.DataFrame() for name in list_of_tickers} 但是,当我运行这部分代码时,会出现以下错误: for ticker, ticker_data in
list_of_tickers = ['BAC','C','GS','JPM','MS','WFC']
dict_of_tickers = {name: pd.DataFrame() for name in list_of_tickers}
但是,当我运行这部分代码时,会出现以下错误:
for ticker, ticker_data in dict_of_tickers.items():
ticker_data = data.DataReader(ticker,'yahoo',start,end)
这创建了所有ticker的一个数据帧,但不允许我区分它们,我觉得这里缺少了一些关键逻辑。
ticker\u数据
只是一个变量,它创建并覆盖了for
循环的每次迭代。那没用。要更新字典,请显式为键指定一个值:
for ticker in dict_of_tickers:
dict_of_tickers['ticker'] = data.DataReader(ticker, 'yahoo', start, end)
这假设数据。DataReader
返回一个数据帧。注意,我们迭代键,因为该赋值不需要值(空数据帧)。事实上,首先不需要使用空数据帧值定义字典。只需使用一本词典:
dict_of_tickers = {ticker: data.DataReader(ticker, 'yahoo', start, end) \
for ticker in list_of_tickers}
我发现DataReader迭代列表本身,因此不需要创建字典进行迭代 下面几行代码实现了我所寻求的,这是一种替代方法,可以从每个股票行情器连接多个数据帧,以避免为每个符号指定DataReader
谢谢,我从您的回复中学到了很多,但是由于某种原因,DataReader在字典理解之外调用时会以dataframe的形式返回,但当用作字典的值时,它会返回一个单列数组值。有没有办法将值提取为数据帧?@Lee,没有,我无法复制<代码>数据。DataReader不能在词典内部和外部执行“不同的操作”。它两次都在做相同的事情,但您应该尝试找出什么(提示:
print(在for
循环中键入(data.DataReader(…)
))。谢谢您,我感谢您的帮助!
start = datetime.datetime(2006,1,1)
end = datetime.datetime(2016,1,1)
list_of_tickers = ['BAC','C','GS','JPM','MS','WFC']
p = data.DataReader(list_of_tickers, 'yahoo', start, end)
res = p.stack().reset_index()
res.columns.names=[None]
res.index.names = ['ID']