pandas.Panel 弃用警告实际推荐的是什么?
What is the pandas.Panel deprecation warning actually recommending?
我有一个使用 pandas 面板生成多索引 pandas 数据帧的包。但是,每当我使用 pandas.Panel 时,我都会收到以下 DeprecationError:
DeprecationWarning:
Panel is deprecated and will be removed in a future version.
The recommended way to represent these types of 3-dimensional data are with a MultiIndex on a DataFrame, via the Panel.to_frame() method.
Alternatively, you can use the xarray package http://xarray.pydata.org/en/stable/.
Pandas provides a .to_xarray()
method to help automate this conversion.
但是,我不明白这里的第一个建议实际上是为了创建 MultiIndex DataFrames 而建议的。如果要删除面板,我将如何使用 Panel.to_frame?
澄清一下:我不是在问什么是弃用,或者如何将我的面板转换为 DataFrames。我要问的是,如果我在库中使用 pandas.Panel 然后 pandas.Panel.to_frame 从 3D ndarrays 创建 MultiIndex DataFrames,并且 Panels 将被弃用,那么什么是不使用面板制作这些 DataFrame 的最佳选择 API?
例如,如果我执行以下操作,将 X 作为具有形状 (N,J,K) 的 ndarray:
p = pd.Panel(X, items=item_names, major_axis=names0, minor_axis=names1)
df = p.to_frame()
尽管这是 中推荐的方法,但这显然不再是 DataFrame 构建的可行的面向未来的选项。
考虑以下面板:
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,以项目为列。形状变成了 (6, 5),原来是 (5, 3, 2)。在哪里使用 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(如果要命名索引,请使用 pd.MultiIndex.from_product
的 names
参数):
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
现在使用 df['item 1']
(可选 df['item 1'].unstack()
)代替 pnl['item1 1']
;您使用 df.xs(2015)
而不是 pnl.xs(2015)
,您使用 df.xs('US', level=1)
而不是 pnl.xs('US', axis='minor')
。
如您所见,这只是将初始 3D numpy 数组重塑为 2D 的问题。您可以在 MultiIndex 的帮助下添加其他(人工)维度。
我有一个使用 pandas 面板生成多索引 pandas 数据帧的包。但是,每当我使用 pandas.Panel 时,我都会收到以下 DeprecationError:
DeprecationWarning: Panel is deprecated and will be removed in a future version. The recommended way to represent these types of 3-dimensional data are with a MultiIndex on a DataFrame, via the Panel.to_frame() method. Alternatively, you can use the xarray package http://xarray.pydata.org/en/stable/. Pandas provides a
.to_xarray()
method to help automate this conversion.
但是,我不明白这里的第一个建议实际上是为了创建 MultiIndex DataFrames 而建议的。如果要删除面板,我将如何使用 Panel.to_frame?
澄清一下:我不是在问什么是弃用,或者如何将我的面板转换为 DataFrames。我要问的是,如果我在库中使用 pandas.Panel 然后 pandas.Panel.to_frame 从 3D ndarrays 创建 MultiIndex DataFrames,并且 Panels 将被弃用,那么什么是不使用面板制作这些 DataFrame 的最佳选择 API?
例如,如果我执行以下操作,将 X 作为具有形状 (N,J,K) 的 ndarray:
p = pd.Panel(X, items=item_names, major_axis=names0, minor_axis=names1)
df = p.to_frame()
尽管这是
考虑以下面板:
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,以项目为列。形状变成了 (6, 5),原来是 (5, 3, 2)。在哪里使用 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(如果要命名索引,请使用 pd.MultiIndex.from_product
的 names
参数):
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
现在使用 df['item 1']
(可选 df['item 1'].unstack()
)代替 pnl['item1 1']
;您使用 df.xs(2015)
而不是 pnl.xs(2015)
,您使用 df.xs('US', level=1)
而不是 pnl.xs('US', axis='minor')
。
如您所见,这只是将初始 3D numpy 数组重塑为 2D 的问题。您可以在 MultiIndex 的帮助下添加其他(人工)维度。