为了账号安全,请及时绑定邮箱和手机立即绑定

Pandas 扁平化分层多索引

Pandas 扁平化分层多索引

犯罪嫌疑人X 2023-12-12 20:28:10
在尝试压平它后,我有一个 pandas 数据框,如下所示:df = pd.DataFrame(web.DataReader(stocks, 'yahoo', day, day).iloc[0]).unstack(level=0).droplevel(level=0, axis=1)Attributes     adjClose        close  ...       volume       dateSymbols                               ...                        FB           261.399994   261.399994  ...   13587000.0 2020-10-19AAPL         115.980003   115.980003  ...  120639300.0 2020-10-19AMZN        3207.209961  3207.209961  ...    5223600.0 2020-10-19GOOG        1534.609985  1534.609985  ...    1607100.0 2020-10-19NFLX                NaN          NaN  ...          NaN 2020-10-19我正在尝试将其保存到数据库中;但是,我在 df.columns 中没有看到符号。为了将 df 保存为以下格式:Symbols       adjClose        close  ...       volume       date FB           261.399994   261.399994  ...   13587000.0 2020-10-19AAPL         115.980003   115.980003  ...  120639300.0 2020-10-19AMZN        3207.209961  3207.209961  ...    5223600.0 2020-10-19GOOG        1534.609985  1534.609985  ...    1607100.0 2020-10-19NFLX                NaN          NaN  ...          NaN 2020-10-19关于如何实现这一目标有什么建议吗?我的数据库在符号、日期列上有一个复合键。谢谢。
查看完整描述

1 回答

?
猛跑小猪

TA贡献1858条经验 获得超8个赞

符号是您的数据帧索引,您需要使用reset_index它来将其放入框架本身。尝试这个:


df = (pd.DataFrame(web.DataReader(stocks, 'yahoo', day, day)

      .iloc[0])

      .unstack(level=0)

      .droplevel(level=0, axis=1)

      .rename_axis(columns=None) # Gets rid of the "Attributes"

      .reset_index()             # Puts "Symbols" as an actual column, not as the index

)

我的2个补充:

  • rename_axis这应该摆脱你的“属性”标题。这主要用于打印时的视觉目的,但可能会让不习惯使用多索引数据的人感到困惑。本质上,您的列标签存储在一个Index对象中。该Index对象可以有一个名称,因此“属性”是列的名称(非常奇怪的概念,这对于普通索引来说并不是非常有用 - 但在使用 a 时有很多用处MultiIndex)。

  • reset_index()看来您的“符号”列实际上并不是一列(这就是为什么它没有出现在df.columns数据帧的索引中,而是出现在数据帧的索引中。添加此方法会将“符号”索引作为列插入到数据帧中,并且创建一个简单的新索引RangeIndex,范围从 0 到数据帧的长度。


查看完整回答
反对 回复 2023-12-12
  • 1 回答
  • 0 关注
  • 121 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信