Series Temporales
Los datos indexados por tiempo requieren agrupación consciente del calendario, estadísticas móviles y reglas explícitas de zona horaria; el DatetimeIndex de pandas proporciona la maquinaria.
Busca en todas las páginas de la documentación
Los datos indexados por tiempo requieren agrupación consciente del calendario, estadísticas móviles y reglas explícitas de zona horaria; el DatetimeIndex de pandas proporciona la maquinaria.
Tarjeta de receta de referencia rápida, lista para copiar y pegar.
import pandas as pd
ts = df.set_index("ordered_at").sort_index()
daily = ts["revenue"].resample("D").sum()
roll = daily.rolling(7, min_periods=3).mean()
local = ts.index.tz_convert("America/New_York")Cuándo usar esto:
import pandas as pd
idx = pd.date_range("2025-01-01", periods=48, freq="h", tz="UTC")
events = pd.DataFrame(
{"revenue": range(48), "region": ["East"] * 24 + ["West"] * 24},
index=idx,
)
events.index.name = "ts"
# Totales diarios por región (ancho)
daily = (
events.groupby([pd.Grouper(freq="D"), "region"])["revenue"]
.sum()
.unstack(fill_value=0)
)
# Media móvil de 7 días en la columna East
daily["East_roll7"] = daily["East"].rolling(7, min_periods=3).mean()
# Reindexación de días hábiles con relleno hacia adelante para huecos de informes
biz = daily.asfreq("B").ffill()
# Mostrar en el Este de EE. UU.
eastern = events.index.tz_convert("America/New_York")
print(daily.head())
print("primera hora del Este:", eastern[0])Lo que esto demuestra:
Grouper(freq="D") para cubos diarios del calendariomin_periods para evitar ventanas pequeñasasfreq + ffill para alineación de días hábilesDatetimeIndex almacena int64 nanosegundos más metadatos de zona horaria.resample agrupa en períodos regulares (cadenas de reglas como D, ME, h).rolling desliza una ventana fija; expanding crece desde el principio.| Regla | Significado |
|---|---|
h | Horario |
D | Día del calendario |
B | Día hábil |
ME | Fin de mes |
W-MON | Lunes semanal |
import pandas as pd
# Analizar formatos mixtos, forzar UTC
pd.to_datetime(series, format="mixed", utc=True)
# Desplazar para características de rezago
df["revenue_lag1"] = df["revenue"].shift(1)resample y rolling asumen tiempo ordenado. Solución: df.sort_index() primero.tz_convert para visualización.MS vs ME cambia los límites de KPI. Solución: documentar el calendario de informes con las partes interesadas.min_periods predeterminado = window produce muchos NA. Solución: reducir min_periods a sabiendas o imputar huecos.DatetimeIndex de extremo a extremo.| Alternativa | Usar Cuando | No Usar Cuando |
|---|---|---|
Polars group_by_dynamic | Cubos de tiempo perezosos grandes | Cuadernos pequeños solo de pandas |
| statsmodels | ARIMA/descomposición estacional | KPIs de remuestreo simples |
DuckDB date_trunc | Agregaciones de almacén nativas de SQL | Operaciones de Series en una sola máquina |
np.convolve | Suavizado FIR fijo en ndarray | Marcas de tiempo irregulares |
resample opera directamente sobre DatetimeIndex.Grouper se adjunta a las claves de columna en groupby.ts.resample("D").sum().asfreq("D", fill_value=0)weekly = ts.resample("W").sum()
wow = weekly.pct_change()ts.rolling("7D").mean()merge_asof para uniones "as-of".closed="left" incluye el borde izquierdo del cubo.label establece qué marca de tiempo nombra el cubo.ts.index.duplicated().any()to_excel.merge_asofVersiones de la Pila: Esta página fue escrita para Python 3.14.0 (estable 3.14, mantenimiento 3.13), FastAPI 0.115+, Django 5.2, Flask 3.1, Pydantic 2, PyTorch 2.6+, pandas 2.2+, Polars 1.x, ruff 0.9+ y uv 0.6+.
Revisado por Chris St. John·Última actualización: 16 jul 2026