【问题标题】:Why are the items in panel4d copied?为什么 panel4d 中的项目被复制?
【发布时间】:2023-03-17 16:33:01
【问题描述】:

这是来自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 填充的数据框)而不是副本。有没有办法做到这一点?

【问题讨论】:

    标签: python pandas panel


    【解决方案1】:

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

    您可以通过先创建重新索引的面板来解决此问题

    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]
    

    【讨论】:

    • 谢谢。由于一般情况下,我们事先并不知道面板的所有项目,所以我想使用items = Index(set(np.concatenate([ panel.items for panel in listOfPanels ]))) 获取它们,然后重新索引面板。不过,我不确定这是最有效的方法。
    猜你喜欢
    • 2016-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-16
    • 2013-02-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多