Python 熊猫是什么?专家组的反对警告到底是什么?
我有一个使用pandas面板生成多索引pandas数据帧的包。但是,每当我使用pandas.Panel时,我都会得到以下DeprecationError: 弃用警告: 面板已弃用,将在将来的版本中删除。 建议通过Panel.to_frame()方法在数据帧上使用多索引来表示这些类型的三维数据。 或者,您可以使用xarray包。 Pandas提供了一个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
.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