Panel的标准轴名称是Items,Major_axis和Minor_axis
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
这对于地狱而言是无法形容的,并且对于Panel4D来说情况更糟,其中标签被添加为第四轴。有没有办法在初始化期间更改它们?或者我可以使用pd.core.create_nd_panel_factory
创建具有不同轴名称的新Panel4D工厂吗?
编辑: 所以我最终想要的是
Out[3]:
<class 'pandas.core.panel.Panel'>
Dimensions: 0 (items) x 0 (major_axis) x 0 (minor_axis)
X axis: None
Y axis: None
Z axis: None
答案 0 :(得分:1)
由于pandas access axis by user-defined name中给出的答案是针对旧的pandas版本而不提供完整功能,因此它的工作原理如下:
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]
而不会抛出异常。