【问题标题】:Pandas Panel to DataFrame indexingPandas 面板到 DataFrame 索引
【发布时间】:2018-05-04 03:30:22
【问题描述】:

我有以下代码:

import pandas as pd
import pandas_datareader.data as web

pdata = pd.Panel(dict((stk, web.get_data_yahoo(stk, '1/1/2009', '6/1/2012')) 
                      for stk in ['AAPL', 'GOOG', 'MSFT']))
pdata

<class 'pandas.core.panel.Panel'>
Dimensions: 6 (items) x 861 (major_axis) x 3 (minor_axis)
Items axis: Open to Volume
Major_axis axis: 2009-01-02 00:00:00 to 2012-06-01 00:00:00
Minor_axis axis: AAPL to MSFT

                        AAPL        GOOG        MSFT
Date         minor          
2009-01-02   Open       12.268572   153.302917  19.530001
             High       13.005714   159.870193  20.400000
             Low        12.165714   151.762924  19.370001
             Close      12.964286   159.621811  20.330000
             Adj Close  11.621618   159.621811  16.140903

通常以下方法可以满足我的需要:

pdata = pdata.swapaxes('items', 'minor')

我收到以下警告:

Panel is deprecated and will be removed in a future version.
The recommended way to represent these types of 3-dimensional data are 
with a MultiIndex on a DataFrame, via the Panel.to_frame() method

我的目标是有一个面板形式的数据框,使用日期和股票代码作为市长和次要行索引,以及开盘价等作为列:

              minor   Open       High        Low         Close       Adj Close
Date
2009-01-02    AAPL    12.268572  19.530001   12.165714   12.964286   11.621618    
              GOOG    153.302917 ...         ...         ...         ...
              MSFT    19.530001  ...         ...         ...         ...

我确实将 Panel 对象转换为 DataFrame 并尝试使用 pivot_table 或 set_index 方法,但我无法将股票代码作为内行索引。当我在 DF 上使用 swapaxes 方法时,日期也会交换到列。有什么简单的方法可以获得我需要的格式吗?

【问题讨论】:

  • 我无法在这些软件包的最新版本上运行您的代码。
  • @coldspeed 有时 web.get_data_yahoo 命令不起作用,必须运行 2-3 次才能使其起作用。您从该命令中得到的错误是什么?
  • 是的。 RemoteDataError。啊,第四次运行它就成功了。

标签: python pandas panel hierarchical-data multi-index


【解决方案1】:

选项 1
unstack + swaplevel + sort_index

pdata.to_frame().unstack(0).T\
      .swaplevel(0, 1).sort_index(level=[0]).head(6)

minor                  Open        High         Low       Close   Adj Close  \
Date                                                                          
2009-01-02 AAPL   12.268572   13.005714   12.165714   12.964286   11.621618   
           GOOG  153.302917  159.870193  151.762924  159.621811  159.621811   
           MSFT   19.530001   20.400000   19.370001   20.330000   16.140903   
2009-01-05 AAPL   13.310000   13.740000   13.244286   13.511429   12.112095   
           GOOG  159.462845  164.549759  156.482239  162.965073  162.965073   
           MSFT   20.200001   20.670000   20.059999   20.520000   16.291746   

minor                 Volume  
Date                          
2009-01-02 AAPL  186503800.0  
           GOOG    7267900.0  
           MSFT   50084000.0  
2009-01-05 AAPL  295402100.0  
           GOOG    9841400.0  
           MSFT   61475200.0 

选项 2
Wen 的精彩 stack 等效。

pdata.to_frame().stack().unstack(-2).head(6)

minor                  Open        High         Low       Close   Adj Close  \
Date                                                                          
2009-01-02 AAPL   12.268572   13.005714   12.165714   12.964286   11.621618   
           GOOG  153.302917  159.870193  151.762924  159.621811  159.621811   
           MSFT   19.530001   20.400000   19.370001   20.330000   16.140903   
2009-01-05 AAPL   13.310000   13.740000   13.244286   13.511429   12.112095   
           GOOG  159.462845  164.549759  156.482239  162.965073  162.965073   
           MSFT   20.200001   20.670000   20.059999   20.520000   16.291746   

minor                 Volume  
Date                          
2009-01-02 AAPL  186503800.0  
           GOOG    7267900.0  
           MSFT   50084000.0  
2009-01-05 AAPL  295402100.0  
           GOOG    9841400.0  
           MSFT   61475200.0 

【讨论】:

  • 不错的解决方案! :)
  • @user280809 好的 :-)
  • @Wen 我很确定有一个等效的堆栈,但是您成功了!要写答案吗?
  • @cᴏʟᴅsᴘᴇᴇᴅ 不,你可以添加我的朋友~让我们让这个网站变得清晰明了:-)
猜你喜欢
  • 2016-09-12
  • 2018-02-15
  • 2017-03-25
  • 2018-02-28
  • 2019-04-13
  • 1970-01-01
  • 2020-03-10
  • 2019-03-21
  • 2018-06-18
相关资源
最近更新 更多