为什么要复制panel4d中的项目?

时间:2014-01-10 22:16:34

标签: python pandas panel

这是pandas documentation

中的一个示例
import numpy as np
from pandas import *
randn = np.random.randn

data = { 'Label1' : Panel({ 'Item1' : DataFrame(randn(4, 3)) }),
         'Label2' : Panel({ 'Item2' : DataFrame(randn(4, 2)) }) }
p4d = Panel4D(data)

子面板'Label1'不应包含数据框'Item2',但我会获得'Item1'的副本:

In [29]: p4d.ix['Label1','Item1',:,:]
Out[29]: 
          0         1         2
0  0.283740  0.123377  0.122482
1  0.756958  0.618638 -1.732440
2  0.070798 -0.621752 -0.196360
3  0.462558 -1.023808  0.234144

In [30]: p4d.ix['Label1','Item2',:,:]
Out[30]: 
          0         1         2
0  0.283740  0.123377  0.122482
1  0.756958  0.618638 -1.732440
2  0.070798 -0.621752 -0.196360
3  0.462558 -1.023808  0.234144

,反之亦然'Label2''Item1'

为什么Panel4d的功能是这样的?

我更喜欢空数据帧(或至少一个用NaN填充)而不是副本。有没有办法做到这一点?

1 个答案:

答案 0 :(得分:0)

原来这是一个错误。完全重新索引(例如,提供所有轴)Panel或更高的暗淡对象时显示。显示0.13及更低版本。该报告在此处,错误修复将在0.13.1中。 https://github.com/pydata/pandas/issues/5905

您可以先创建一个重新编制索引的Panel

来解决此问题
In [15]: items = ['Item1','Item2']

In [17]: p1 = Panel({ 'Item1' : DataFrame(randn(4, 3)) }).reindex(items=items)

In [18]: p2 = Panel({ 'Item2' : DataFrame(randn(4, 2)) }).reindex(items=items)

In [26]: p4d = pd.Panel4D({ 'Label1' : p1, 'Label2' : p2 })

In [27]: p4d.ix['Label1','Item1']
Out[27]: 
          0         1         2
0  1.974462 -0.916765 -0.577381
1  0.378009  0.047688 -0.281828
2 -0.288759  0.697560 -0.074013
3 -0.124308  0.908857 -0.042192

[4 rows x 3 columns]

In [28]: p4d.ix['Label1','Item2']
Out[28]: 
    0   1   2
0 NaN NaN NaN
1 NaN NaN NaN
2 NaN NaN NaN
3 NaN NaN NaN

[4 rows x 3 columns]