El índice temporal de pandas: trucos esenciales
Una de las mayores ventajas de trabajar con series temporales en pandas es que el índice no es solo una etiqueta: es una herramienta que te permite filtrar, agregar y transformar datos sin escribir bucles.
En este subcapítulo verás los patrones que usarás una y otra vez: seleccionar rangos de fechas, cambiar la frecuencia de la serie y calcular estadísticas móviles.
Seleccionar rangos de fechas
Cuando el índice es un DatetimeIndex, puedes usar strings para seleccionar periodos.
import pandas as pd
import numpy as np
fechas = pd.date_range(start="2020-01-01", periods=365, freq="D")
serie = pd.Series(np.random.randn(365).cumsum(), index=fechas)
# Todo el año 2020
serie_2020 = serie["2020"]
# Desde marzo hasta junio
serie_q2 = serie["2020-03":"2020-06"]
# Solo un mes concreto
serie_marzo = serie["2020-03"]
Esta sintaxis es mucho más legible que filtrar con máscaras booleanas sobre columnas de fecha.
Cambiar la frecuencia con resample
resample es como groupby pero para el tiempo. Te permite pasar de datos diarios a semanales, mensuales o anuales.
# Datos diarios a mensuales: media de cada mes
serie_mensual = serie.resample("ME").mean()
# Datos diarios a semanales: suma de cada semana
serie_semanal = serie.resample("W").sum()
# Máximo anual
serie_anual_max = serie.resample("YE").max()
Fíjate en que
MEsignifica “fin de mes” yYE“fin de año”. Estas etiquetas cambiaron en pandas 2.2; si usas una versión anterior puede que necesitesMyY.
Desplazar series con shift
shift mueve los valores hacia delante o hacia atrás en el tiempo. Es útil para crear variables rezagadas.
# Valor del día anterior
serie_lag1 = serie.shift(1)
# Diferencia respecto al día anterior
serie_diff = serie.diff()
# Variación porcentual respecto al día anterior
serie_pct = serie.pct_change() * 100
El lag más básico es la base de muchos modelos de forecasting: predecir el valor de mañana usando los valores de hoy, ayer y la semana pasada.
Ventanas móviles
Las ventanas móviles permiten calcular estadísticas sobre un tramo deslizante de la serie.
# Media móvil de 7 días
media_7 = serie.rolling(window=7).mean()
# Desviación estándar móvil de 30 días
std_30 = serie.rolling(window=30).std()
# Mínimo móvil de 14 días
min_14 = serie.rolling(window=14).min()
La media móvil es especialmente útil para suavizar el ruido y ver la tendencia subyacente.
Resumen
En este subcapítulo has visto cómo aprovechar el índice temporal de pandas para:
- Seleccionar periodos con strings.
- Cambiar la frecuencia con
resample. - Crear lags y diferencias con
shiftydiff. - Calcular estadísticas móviles con
rolling.
Estas operaciones son el 80 % del trabajo diario con series temporales. El siguiente paso es aprender a visualizarlos correctamente.