微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

pandas.Panel弃用警告实际上建议什么?

如何解决pandas.Panel弃用警告实际上建议什么?

考虑以下面板:

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']
)

如果将其转换为DataFrame,它将变为:

             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

因此,它将长轴和短轴作为行MultiIndex,将项目作为列。形状变为原来的(5,3,2)(6,5)。由您决定在哪里使用MultiIndex,但是如果您想要完全相同的形状,则可以执行以下操作:

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)]
)

产生相同的DataFrame(如果要命名索引,请使用names参数pd.MultiIndex.from_product):

         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

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

如您所见,这只是将您最初的3D numpy数组重塑为2D的问题。您可以在MultiIndex的帮助下添加其他(人工)维度。

解决方法

我有一个使用pandas Panels生成MultiIndex pandas
DataFrames的程序包。但是,每当我使用pandas.Panel时,都会收到以下DeprecationError:

弃用警告:不建议使用面板,并且在以后的版本中将其删除。推荐的表示此类3维数据类型的方法是通过Panel.to_frame()方法在DataFrame上使用MultiIndex。或者,您可以使用xarray包http://xarray.pydata.org/en/stable/。熊猫提供了一种.to_xarray()方法来帮助自动进行此转换。

但是,我不明白这里的第一个建议实际上是为创建MultiIndex
DataFrames建议的。如果要删除Panel,我将如何使用Panel.to_frame?


需要澄清的是:我不是在问什么是弃用,也不是如何将面板转换为DataFrames。我要问的是,如果我在库中使用pandas.Panel然后使用pandas.Panel.to_frame从3D
ndarrays创建MultiIndex DataFrames,而Panels将被弃用,那么最好的选择是使这些DataFrames没有使用面板API?

例如,如果我正在执行以下操作,则将X作为形状为(N,J,K)的ndarray:

p = pd.Panel(X,items=item_names,major_axis=names0,minor_axis=names1)
df = p.to_frame()

尽管这是此问题中推荐的方法,但是对于DataFrame构造,这显然不再是可行的面向未来的选项。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。