2015-09-30 46 views
0

一個小組的標準軸名稱項目,Major_axis和Minor_axis更改熊貓面板的indescriptive軸名稱和Panel4D

In [2]: pd.Panel() 
Out[2]: 
<class 'pandas.core.panel.Panel'> 
Dimensions: 0 (items) x 0 (major_axis) x 0 (minor_axis) 
Items axis: None 
Major_axis axis: None 
Minor_axis axis: None 

也就是說indescriptive如地獄,它Panel4D,在標籤中添加變得更糟第四軸。有沒有辦法在初始化時更改它們?或者我可以使用pd.core.create_nd_panel_factory創建一個帶有不同軸名稱的新Panel4D工廠?

編輯: 所以我最後想擁有的是

​​
+1

當你創建一個面板相反,它是非常具有描述性的。您想添加如下內容:'項目軸 - 以下是不同DataFrames的名稱:None'?對不起,但你試圖達到的是不明確的。 –

+0

@Colonel Beauvel:對不起,我沒有明白你的意思。 – HeinzKurt

+1

這是我的觀點......編輯標籤或添加一些東西......但很好添加輸出! –

回答

1

由於pandas access axis by user-defined name給出的答案是一個古老的大熊貓版本,並且不提供完整的功能,這是它如何工作的:

from pandas.core.panelnd import create_nd_panel_factory 
from pandas.core.panel import Panel 

Panel4D = create_nd_panel_factory(
    klass_name='Panel4D', 
    orders=['axis1', 'axis2', 'axis3', 'axis4'], 
    slices={'labels': 'labels', 
      'axis2': 'items', 
      'axis3': 'major_axis', 
      'axis4': 'minor_axis'}, 
    slicer=Panel, 
    stat_axis=2, 
) 


def panel4d_init(self, data=None, axis1=None, axis2=None, axis3=None, 
       axis4=None, copy=False, dtype=None): 

    self._init_data(data=data, axis1=axis1, axis2=axis2, 
        axis3=axis3, axis4=axis4, 
        copy=copy, dtype=dtype) 

Panel4D.__init__ = panel4d_init 

這只是一個part of the Pandas source code,但稍作修改。

然後你得到

>>> Panel4D(np.random.rand(4,4,4,4)) 
Out[1]: 
<class 'pandas.core.panelnd.Panel4D'> 
Dimensions: 4 (axis1) x 4 (axis2) x 4 (axis3) x 4 (axis4) 
Axis1 axis: 0 to 3 
Axis2 axis: 0 to 3 
Axis3 axis: 0 to 3 
Axis4 axis: 0 to 3 

,並違背了pandas access axis by user-defined name給出了答案,中Panel4D一個實例,然後是全功能的行爲就像中pandas.Panel4D一個實例。例如,你現在可以做Panel4D(np.empty((1,1,1,1)))[0]而不拋出異常。

+0

你的回答很好,我不能將它標記爲重複,因爲前面的問題沒有被接受。 –