【问题标题】:How to iterate through pandas-datareader and create multiple dataframes for each stock ticker?如何遍历 pandas-datareader 并为每个股票代码创建多个数据框?
【发布时间】:2019-01-20 15:56:16
【问题描述】:

我想从代码名称列表中迭代地创建多个数据框。

这是我引用的堆栈溢出帖子:

Stack Overflow Post - Iteratively Create Multiple Dataframes

我无法理解如何做到这一点,我觉得我在这里遗漏或误解了什么?

我写了以下列表和字典

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)

这会为所有代码创建一个单独的数据框,但我无法区分它们,我觉得我在这里缺少一些关键逻辑。

【问题讨论】:

    标签: python dataframe sqldatareader stock stocks


    【解决方案1】:

    我发现 DataReader 会迭代列表本身,因此不需要创建字典进行迭代。

    以下代码行实现了我所寻求的,这是连接每个股票代码的多个数据帧以避免为每个符号指定 DataReader 的替代方法。

    1. 设置日期范围:
    start = datetime.datetime(2006,1,1)
    end = datetime.datetime(2016,1,1)
    
    1. 指定符号:
     list_of_tickers = ['BAC','C','GS','JPM','MS','WFC']
    
    1. 迭代每个代码,创建一个多级列数据框:
    p = data.DataReader(list_of_tickers, 'yahoo', start, end)
    
    1. 可选:然后旋转“符号”列级别并替换日期索引,以便可以在分析中使用它:
    res = p.stack().reset_index()
    
    1. 可选:此步骤不是必需的,纯粹是为了美观,以清理 FrozenList 和索引名称:
    res.columns.names=[None]
    res.index.names = ['ID']
    

    【讨论】:

      【解决方案2】:

      ticker_data 只是一个在for 循环的每次迭代中创建并覆盖的变量。那没有帮助。要更新您的字典,请显式为键分配值:

      for ticker in dict_of_tickers:
          dict_of_tickers['ticker'] = data.DataReader(ticker, 'yahoo', start, end)
      

      这假设data.DataReader 返回一个数据帧。请注意,我们迭代键,因为此分配不需要值(空数据框)。事实上,您首先需要定义一个包含空数据框值的字典。只需使用一个字典理解:

      dict_of_tickers = {ticker: data.DataReader(ticker, 'yahoo', start, end) \
                         for ticker in list_of_tickers}
      

      【讨论】:

      • 谢谢你,我从你的回复中学到了很多东西,但是似乎由于某种原因,DataReader 在字典理解之外被自己调用时作为数据帧返回,但是当用作字典的值时返回单列数组值。有没有办法将值提取为数据框?
      • @Lee,不,我无法复制。 data.DataReader 不能在字典理解与外部做“不同的事情”。它两次都在做同样的事情,但你应该尝试找出是什么(提示:for 循环中的print(type(data.DataReader(...)))。
      • 谢谢,感谢您的帮助!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-07
      • 1970-01-01
      • 2020-09-23
      • 2015-08-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多