【问题标题】:Python pandas - trying to a dict of df's into a panel (or loop the df items into a panel)Python pandas - 尝试将 df 的字典放入面板(或将 df 项循环到面板中)
【发布时间】:2015-02-19 19:52:29
【问题描述】:

我在数据框中有股票数据,其列标题如 AAPL、AAPL_ma、MSFT、MSFT_ma - 并且希望以某种方式将数据放入面板中,其中项目 = 股票代码(因此 AAPL 项目将包括 AAPL 和 AAPL_ma)。

我是 pandas 的新手,正在努力制定一个连贯的计划。我不知道我是否应该:(1)使用 MultiIndex 功能,(2)循环遍历列表以将数据写入名为股票代码的新 df,或(3)按符号拆分现有数据帧(例如,' 'AAPL_ma' 中的 AAPL')。

任何方向都将不胜感激。提前致谢!

更新:

根据 EdChum 的建议,我正在使用以下内容以字符串形式为我的 df 创建列标题的字典。不确定这是否是您的意思 - 正在进行中。

y = [df['Date']]
dict_stocks = {}
# create dict for multiindexing
for stock in list_stocks:
    i=0    		
    x=[df[stock]]
    for heading in list_headings:
        data_series = df[stock + list_headings[i]]
        i = i + 1
        x.append(data_series)
    dict_stocks[stock] = y + x

上面产生了一个df的字典,尽管轴不是我所期望的。但是,我没有运气:

my_panel = pd.Panel(df)
my_panel = pd.Panel.from_dict(dict_stocks)

产生错误:

--PandasError: Panel 构造函数没有正确调用!

--AttributeError: 'list' 对象没有属性 'shape'

【问题讨论】:

  • 既然您已经拥有这些列,为什么不直接列出它们:list(df)
  • 按符号进行多重索引对我来说很有意义 - 所以 AAPL、AAPL_chg 和 AAPL_ma 都属于 AAPL。但我不知道如何使用 list(df) 执行。
  • 那为什么不使用符号作为键来制作 dfs 的字典
  • 感谢 EdChum 的意见。仍在为大局而努力,但朝着正确的方向迈出了一步。
  • 是的,我认为是这样的

标签: python pandas split dataframe multi-index


【解决方案1】:

您最简单的方法是创建一个多索引字典,其中的键是 (aapl, aapl) 和 (aapl,aapl_ma) 之类的元组,然后在字典上执行 pandas.Dataframe()。 http://pandas.pydata.org/pandas-docs/dev/advanced.html

如果您想做一个面板,我建议您使用 EdChums 的答案,即创建一个数据帧字典,其中键是符号,然后您可以使用该字典创建一个带有 pandas.Panel() 的面板。

【讨论】:

  • Skorp - 感谢发帖。我已经在我的更新中创建了上面的 dict,但还没有成功地将带有 dict 键的数据关联推回 df 或面板。
  • 我认为您可以将 dict 传递给 pandas.Panel()。所以你会做 p = pandas.Panel(your_dict)。如果您的 dict 键是元组,那么您可以执行 df = pandas.Dataframe(your_dict) 这应该会导致一帧具有多索引。
  • 再次感谢您的帮助!我需要重新创建字典以包含每个系列,而不仅仅是字符串列标题(如上所述,我所做的没有数据) - 然后我会接受你的建议。
猜你喜欢
  • 1970-01-01
  • 2014-10-28
  • 1970-01-01
  • 1970-01-01
  • 2021-10-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-03
相关资源
最近更新 更多