2017-11-20 5 views
0

나는 다음과 같은 코드가 있습니다팬더 패널 DataFrame 색인에

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 

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 

을 일반적으로 다음과 같은 방법은 내가 원하는 걸 줄 것이다

내 목표는 데이터 프레임을 패널 형식으로 사용하는 것입니다. 시장 및 주식 시세 표시기를 시장 및 부 행 인덱스로 사용하고 D이 같은 열로 등 열기 가격 :

   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 ...   ...   ...   ... 

나는 DataFrame로 패널 개체를 변환했고, pivot_table 또는 set_index 방법을 사용하려고하지만 난 주식 시세 표시기가 내부로 얻을 수 없다 행 색인. DF에서 swapaxes 메서드를 사용하면 Date도 열로 스왑됩니다. 필요한 형식을 얻을 수있는 쉬운 방법이 있습니까?

+1

이 패키지의 최신 버전에서 코드를 실행할 수 없습니다. –

+0

@coldspeed 때때로 web.get_data_yahoo 명령이 작동하지 않고 작동시키기 위해 2-3 번 실행해야하는 경우가 있습니다. 그 명령에서 얻은 오류입니까? – user280809

+0

예. 'RemoteDataError'. 아, 네 번째로 실행하면 효과가 있습니다. –

답변

2

옵션 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
원 총리의 멋진 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 
+1

좋은 해결책! :) – MaxU

+0

@ 맥스, 고맙습니다, 많이 고맙습니다.] –

+1

작동합니까? 'df.stack(). unstack (-2)' – Wen