Migración de Panel de pandas a xarray: solución para datos 3D

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:

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.

Etiquetas: pandas xarray Panel dataframe MultiIndex

Publicado el 7-8 19:25