¿Qué están recomendando realmente las advertencias de eliminación de pandas.Panel?

Tengo un paquete que utiliza paneles de pandas para generar DataFrames de pandas de MultiIndex. Sin embargo, siempre que uso pandas.Panel, obtengo el siguiente DeprecationError:

Advertencia de desaprobación: el panel está en desuso y se eliminará en una versión futura. La forma recomendada de representar estos tipos de datos tridimensionales es con un MultiIndex en un DataFrame, a través del método Panel.to_frame (). Alternativamente, puede usar el paquete xarray http://xarray.pydata.org/en/stable/ . Pandas proporciona un método .to_xarray() para ayudar a automatizar esta conversión.

Sin embargo, no puedo entender lo que la primera recomendación aquí es realmente recomendada para crear cuadros de datos MultiIndex. Si se va a eliminar el Panel, ¿cómo podré usar Panel.to_frame?


Para aclarar: no estoy preguntando qué es la desaprobación, o cómo convertir mis Paneles a DataFrames. Lo que estoy preguntando es si estoy utilizando pandas.Panel y luego pandas.Panel.to_frame en una biblioteca para crear MultiIndex DataFrames a partir de ndarrays 3D, y Panels quedará obsoleto, entonces ¿cuál es la mejor opción para hacer esos DataFrames sin utilizando el panel API?

Por ejemplo, si estoy haciendo lo siguiente, con X como un ndarray con forma (N, J, K):

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

    Claramente, esto ya no es una opción viable a prueba de futuro para la construcción de DataFrame, aunque fue el método recomendado en esta pregunta .

    Considere el siguiente 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'] ) 

    Si convierte esto a un DataFrame, esto se convierte en:

      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 

    Por lo tanto, toma los ejes mayor y menor como la fila MultiIndex y los elementos como columnas. La forma se ha convertido (6, 5) que era originalmente (5, 3, 2). Depende de usted dónde usar el MultiIndex, pero si desea la misma forma, puede hacer lo siguiente:

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

    que produce el mismo DataFrame (use el parámetro names de pd.MultiIndex.from_product si desea nombrar sus índices):

      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 

    Ahora, en lugar de pnl['item1 1'] , usa df['item 1'] (opcionalmente df['item 1'].unstack() ); en lugar de pnl.xs(2015) utiliza df.xs(2015) y en lugar de pnl.xs('US', axis='minor') , usa df.xs('US', level=1) .

    Como puede ver, esto es solo una cuestión de cambiar la forma de su matriz numpy 3D inicial a 2D. Usted agrega la otra dimensión (artificial) con la ayuda de MultiIndex.