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

2024-09-27 20:17:31 发布

您现在位置:Python中文网/ 问答频道 /正文

这是来自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'

为什么功能面板4d的行为是这样的

我更喜欢一个空的数据帧(或者至少一个填充了NaN)而不是一个副本。有办法吗


Tags: 数据import面板dataframepandasdatanp副本
1条回答
网友
1楼 · 发布于 2024-09-27 20:17:31

原来这是个虫子。当面板或更高尺寸对象完全重新建立索引(例如提供所有轴)时显示。在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]

相关问题 更多 >

    热门问题