La clase Panel de pandas ha sido marcada como obsoleta y será eliminada en versiones futuras. Esto se debe a que pandas recomienda utilizar xarray para manejar estructuras de datos tridimensionales. El mensaje de advertencia sugiere dos alternativas:
- Usar un MultiIndex en un DataFrame a través del método
Panel.to_frame() - Utilizar el paquete xarray (http://xarray.pydata.org/en/stable/) con el método
.to_xarray()
Conversión con xarrray
El método to_xarray() permite convertir DataFrames y Series de pandas en objetos de xarray (DataArray o Dataset). A continuación se muestran ejemplos de uso:
import pandas as pd
import numpy as np
# Crear DataFrame de ejemplo
df = pd.DataFrame([('halcón', 'ave', 389.0, 2),
('loro', 'ave', 24.0, 2),
('león', 'mamífero', 80.5, 4),
('mono', 'mamífero', np.nan, 4)],
columns=['nombre', 'clase', 'velocidad_max',
'num_patas'])
# Convertir DataFrame a xarray
ds = df.to_xarray()
print(ds)
# <xarray.Dataset>
# Dimensions: (index: 4)
# Coordinates:
# * index (index) int64 0 1 2 3
# Data variables:
# nombre (index) object 'halcón' 'loro' 'león' 'mono'
# clase (index) object 'ave' 'ave' 'mamífero' 'mamífero'
# velocidad_max (index) float64 389.0 24.0 80.5 nan
# num_patas (index) int64 2 2 4 4
# Convertir una Serie
serie = df['velocidad_max'].to_xarray()
print(serie)
# <xarray.DataArray 'velocidad_max' (index: 4)>
# array([389. , 24. , 80.5, nan])
# Coordinates:
# * index (index) int64 0 1 2 3
# Ejemplo con MultiIndex
fechas = pd.to_datetime(['2023-01-01', '2023-01-01',
'2023-01-02', '2023-01-02'])
df_multi = pd.DataFrame({'fecha': fechas,
'animal': ['halcón', 'loro', 'halcón',
'loro'],
'velocidad': [350, 18, 361, 15]}).set_index(['fecha',
'animal'])
ds_multi = df_multi.to_xarray()
print(ds_multi)
# <xarray.Dataset>
# Dimensions: (animal: 2, fecha: 2)
# Coordinates:
# * fecha (fecha) datetime64[ns] 2023-01-01 2023-01-02
# * animal (animal) object 'halcón' 'loro'
# Data variables:
# velocidad (fecha, animal) int64 350 18 361 15
Trabajando con datos tridimensionales
Para simular el comportamiento de un Panel, se puede crear un Dataset de xarray y aplicar funciones sobre sus variables:
import xarray as xr
# Crear DataFrames que representarían las "tablas" del Panel
df1 = pd.DataFrame({'x':[1,2,3],'y':[4,5,6],'z':[7,8,9]})
df2 = pd.DataFrame({'x':[11,12,13],'y':[14,15,16],'z':[17,18,19]})
# Crear Dataset con claves
ds = xr.Dataset({'tabla1': df1, 'tabla2': df2})
def calcular_promedio(datos):
return datos.mean()
# Aplicar función a todas las variables
resultado = ds.apply(calcular_promedio)
print(resultado)
# <xarray.Dataset>
# Dimensions: ()
# Data variables:
# tabla1 float64 5.0
# tabla2 float64 15.0
# Acceder a resultados específicos
print(resultado['tabla1'].values) # array(5.)
print(resultado['tabla2'].values) # array(15.)
Esta aproximación con xarray proporciona una manera más flexible y potente de trabajar con datos multidimensionales, manteniendo la comaptibilidad con pandas a través de los métodos de conversión.