Python 熊猫是什么?专家组的反对警告到底是什么?

Python 熊猫是什么?专家组的反对警告到底是什么?,python,pandas,numpy,dataframe,python-xarray,Python,Pandas,Numpy,Dataframe,Python Xarray,我有一个使用pandas面板生成多索引pandas数据帧的包。但是,每当我使用pandas.Panel时,我都会得到以下DeprecationError: 弃用警告: 面板已弃用,将在将来的版本中删除。 建议通过Panel.to_frame()方法在数据帧上使用多索引来表示这些类型的三维数据。 或者,您可以使用xarray包。 Pandas提供了一个.to_xarray()方法来帮助自动完成此转换 然而,我不明白这里的第一条建议是什么,以便创建多索引数据帧。如果要移除面板,我将如何使用Panel

我有一个使用pandas面板生成多索引pandas数据帧的包。但是,每当我使用pandas.Panel时,我都会得到以下DeprecationError:

弃用警告: 面板已弃用,将在将来的版本中删除。 建议通过Panel.to_frame()方法在数据帧上使用多索引来表示这些类型的三维数据。 或者,您可以使用xarray包。 Pandas提供了一个
.to_xarray()
方法来帮助自动完成此转换

然而,我不明白这里的第一条建议是什么,以便创建多索引数据帧。如果要移除面板,我将如何使用Panel.to_frame


澄清一下:我不是在问什么是弃用,或者如何将面板转换为数据帧。我想问的是,如果我在库中使用pandas.Panel和pandas.Panel.to_frame从3D Ndarray创建多索引数据帧,并且面板将被弃用,那么在不使用Panel API的情况下创建这些数据帧的最佳选项是什么

例如,如果我在做下面的事情,用X作为一个有形状(N,J,K)的数组:


这显然不再是数据帧构造的一个可行的、经得起未来考验的选项,尽管它是中的推荐方法。

考虑以下面板:

data = np.random.randint(1, 10, (5, 3, 2))
pnl = pd.Panel(
    data, 
    items=['item {}'.format(i) for i in range(1, 6)], 
    major_axis=[2015, 2016, 2017], 
    minor_axis=['US', 'UK']
)
如果将其转换为数据帧,则会变成:

             item 1  item 2  item 3  item 4  item 5
major minor                                        
2015  US          9       6       3       2       5
      UK          8       3       7       7       9
2016  US          7       7       8       7       5
      UK          9       1       9       9       1
2017  US          1       8       1       3       1
      UK          6       8       8       1       6
因此,它将长轴和短轴作为行多索引,将项作为列。形状变成了(6,5),原来是(5,3,2)。在何处使用多重索引取决于您,但如果您想要完全相同的形状,可以执行以下操作:

data = data.reshape(5, 6).T
df = pd.DataFrame(
    data=data,
    index=pd.MultiIndex.from_product([[2015, 2016, 2017], ['US', 'UK']]),
    columns=['item {}'.format(i) for i in range(1, 6)]
)
这将产生相同的数据帧(如果要命名索引,请使用
pd.MultiIndex.from_product
names
参数):

现在不再使用
pnl['item1']
,而是使用
df['item1']
(可选
df['item1'].unstack()
);您使用的不是
pnl.xs(2015)
而是
df.xs(2015)
,而不是
pnl.xs('US',axis='minor')
,您使用的是
df.xs('US',level=1)


如您所见,这只是将最初的3D numpy阵列重塑为2D的问题。在多重索引的帮助下添加其他(人工)维度

如果您现在
Panel.to_frame()
,您将不再拥有任何面板数据?这是针对包的,而不是特定的数据集。如果不推荐使用Panel,那么初始的Panel生成将不起作用。我想问的是,为什么这里推荐的替代方法是使用将不推荐使用的方法,尽管我现在似乎从这里的注释中得到了答案。您是否正在构建使用Panel的API?或者你正在调用一些返回面板的代码?我已经在问题中澄清了这一点,对不起-我都是从3D数据阵列生成面板,然后将其转换为数据帧。啊,很好,我只是做了几乎完全相同的事情,但缺少转置,所以数字排列不太正确@JohnE Yeah axis=0变为axis=1,带有
到_帧
,这不是很直观。再说一次,面板的任何内容对我来说都不是直观的。:)
data = data.reshape(5, 6).T
df = pd.DataFrame(
    data=data,
    index=pd.MultiIndex.from_product([[2015, 2016, 2017], ['US', 'UK']]),
    columns=['item {}'.format(i) for i in range(1, 6)]
)
         item 1  item 2  item 3  item 4  item 5
2015 US       9       6       3       2       5
     UK       8       3       7       7       9
2016 US       7       7       8       7       5
     UK       9       1       9       9       1
2017 US       1       8       1       3       1
     UK       6       8       8       1       6