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

  • 设置日期范围:
  • 指定符号:
  • 迭代每个ticker,创建单个多级列数据帧:
  • 可选:然后旋转“符号”列级别并替换日期索引,以便在分析中使用:
  • 可选:此步骤不是必需的,纯粹是为了清理冻结列表和索引名称:

  • 谢谢,我从您的回复中学到了很多,但是由于某种原因,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']