2016-10-13 115 views
2

考慮pd.Panelpnpd.DataFramedf訪問大熊貓軸通過軸數

import pandas as pd 
import numpy as np 

pn = pd.Panel(np.arange(27).reshape(3, 3, 3), list('XYZ'), list('abc'), list('ABC')) 

pn.to_frame().rename_axis('item', 1).unstack() 

enter image description here

df = pd.DataFrame(np.arange(9).reshape(3, 3), list('abc'), list('ABC')) 

df 

enter image description here


我可以訪問items軸的pnpn.itemscolumns軸的dfdf.columns

問題
但我怎麼得到pnitems軸與數0minor_axis軸與數2?用盡可能多的方法來接受參數axis=0,我想通過編號訪問座標軸是一種直接的方法。

我做什麼
自定義功能

def get_axis(obj, axis=0): 
    if isinstance(obj, pd.Panel): 
     m = pd.Series(['items', 'major_axis', 'minor_axis']) 
    else: 
     m = pd.Series(['index', 'columns']) 
    return obj.__getattribute__(m.loc[axis]) 

print(get_axis(pn, 2)) 
print(get_axis(pn, 1)) 
print(get_axis(pn, 0)) 
print(get_axis(df, 1)) 
print(get_axis(df, 0)) 

Index([u'A', u'B', u'C'], dtype='object') 
Index([u'a', u'b', u'c'], dtype='object') 
Index([u'X', u'Y', u'Z'], dtype='object') 
Index([u'A', u'B', u'C'], dtype='object') 
Index([u'a', u'b', u'c'], dtype='object') 
+0

你知道'.xs'?例如:'pn.xs('A',axis = 1,level = 1)' –

+0

@StevenG是的,我願意。這會返回一個「pn」的截面。我想要'Index'對象是第一個軸。 – piRSquared

回答

2

使用.axes返回索引軸標籤的列表,以及列軸標籤,然後你可以通過切片符號來訪問它。

pn.axes 
#[Index(['X', 'Y', 'Z'], dtype='object'), 
# Index(['a', 'b', 'c'], dtype='object'), 
# Index(['A', 'B', 'C'], dtype='object')] 

然後,您可以提供切片檢索對象:

pn.axes[0] 
#Index(['X', 'Y', 'Z'], dtype='object') 

df.axes[0] 
#Index(['a', 'b', 'c'], dtype='object')