Fechas y series temporales con pandas

Aprende a trabajar con fechas y horas en pandas. Interpreta fechas a partir de texto sin confundir el día y el mes, crea un índice temporal y selecciona cualquier día, mes u hora del día, y compara valores con otros anteriores. Genera secuencias regulares de fechas, desplaza fechas mediante reglas de calendario y trabaja con meses, trimestres y ejercicios fiscales como períodos. Remuestrea datos para obtener totales diarios, semanales o mensuales, rellena valores faltantes, suaviza series con ventanas móviles, expansivas y ponderadas exponencialmente, y gestiona zonas horarias y el horario de verano. Los ejemplos utilizan pandas 3 y datos cotidianos, como lecturas de energía, temperaturas, ventas de tiendas y visitas a sitios web.

IntermedioUnidad 6 de 8 del curso Curso de Análisis de datos con Python

Lo que aprenderás

  1. Almacena momentos y duraciones en los tipos de fecha y hora de pandas, interpreta fechas a partir de texto sin confundir el día y el mes y extrae componentes del calendario, como el mes y el día de la semana.
    • Trabaja con marcas de tiempo, duraciones y componentes del calendario
      Utiliza Timestamp, Timedelta y el tipo de datos datetime64, calcula el tiempo entre eventos y extrae componentes como el año, la hora y el día de la semana con el accesor .dt.
    • Interpreta fechas a partir de texto y dales formato de salida
      Convierte texto y números en fechas y horas con pd.to_datetime, elige formatos para que el día y el mes nunca se intercambien, trata los valores que no se pueden interpretar y convierte de nuevo las fechas y horas en texto legible.
  2. Crea un índice temporal limpio y ordenado, selecciona con él cualquier día, mes o franja horaria y compara cada valor con valores anteriores.
    • Crea y comprueba un índice temporal
      Convierte una columna de fechas y horas en un DatetimeIndex ordenado, trata las marcas de tiempo duplicadas y detecta fechas ausentes y la frecuencia de una serie.
    • Selecciona filas por fecha y hora del día
      Selecciona años, meses, días e intervalos completos con cadenas de fecha, filtra por día de la semana u hora del día y evita los errores que devuelven filas incorrectas.
    • Compara valores a lo largo del tiempo mediante desplazamientos, diferencias y variaciones porcentuales
      Rezaga y adelanta valores, calcula variaciones y tasas de crecimiento y comprende cómo pandas alinea dos series temporales por fecha.
  3. Crea secuencias regulares de fechas, desplaza fechas mediante reglas de calendario como «un mes después» o «el siguiente día hábil» y trabaja con meses completos, trimestres y ejercicios fiscales como períodos.
    • Crea secuencias regulares de fechas con alias de frecuencia
      Genera secuencias de fechas y horas con pd.date_range, elige el alias de frecuencia adecuado y determina correctamente la primera y la última fecha.
    • Desplaza fechas mediante reglas de calendario
      Distingue las duraciones fijas de las reglas de calendario y utiliza DateOffset, desplazamientos a fin de mes, de días hábiles y otros para desplazar fechas correctamente.
    • Trabaja con meses completos, trimestres y ejercicios fiscales como períodos
      Representa intervalos de tiempo con Period y PeriodIndex, convierte entre marcas de tiempo y períodos y gestiona los trimestres de un ejercicio fiscal.
  4. Agrega datos detallados en totales y medias diarios, semanales, mensuales o trimestrales, rellena una cuadrícula temporal más fina y remuestrea varias series a la vez.
    • Reduce la frecuencia temporal calculando totales, medias y otros resúmenes
      Utiliza resample para agregar datos en intervalos de agrupación temporal más amplios, elige la agregación adecuada e interpreta correctamente los límites y las etiquetas de los intervalos.
    • Aumenta la frecuencia temporal y rellena los valores faltantes de una serie
      Pasa los datos a una cuadrícula temporal más fina, rellena las nuevas posiciones trasladando valores hacia adelante o hacia atrás o interpolando, y muestra las fechas ausentes.
    • Remuestrea varias series a la vez mediante grupos
      Remuestrea por grupos una tabla larga con muchas tiendas, sensores o clientes y reestructura el resultado para compararlo.
  5. Calcula medias móviles y otros estadísticos de ventana sobre un número de filas o un intervalo de tiempo, además de sumas acumuladas y medias ponderadas que tienen en cuenta todo el historial.
    • Calcula estadísticos móviles sobre un número fijo de filas
      Utiliza rolling(n) para obtener medias móviles, sumas y otros estadísticos, controla las ventanas incompletas y aplica ventanas por grupos.
    • Utiliza ventanas basadas en el tiempo para datos irregulares
      Define ventanas mediante un intervalo de tiempo como «7D», comprende qué observaciones incluye cada ventana y elige entre ventanas basadas en filas y en el tiempo.
    • Calcula sumas acumuladas, máximos acumulados y medias ponderadas exponencialmente
      Utiliza ventanas expansivas para calcular estadísticos acumulados y caídas relativas desde el máximo acumulado, y medias ponderadas exponencialmente que dan más peso a los valores recientes.
  6. Asigna la zona horaria adecuada a las marcas de tiempo, convierte entre zonas, combina datos de distintas zonas y gestiona las horas que el horario de verano omite o repite.
    • Asigna zonas horarias a las marcas de tiempo y conviértelas entre zonas
      Distingue las marcas de tiempo sin zona horaria de las que tienen zona, asigna una zona con tz_localize, convierte con tz_convert y combina datos registrados en distintas zonas.
    • Gestiona el horario de verano en series temporales
      Reconoce las horas locales omitidas y repetidas, asígnales una zona horaria de forma deliberada y remuestrea y desplaza correctamente en días de 23 o 25 horas.

Guía de estudio de Fechas y series temporales con pandas

6 capítulos

1

Convierte fechas y horas en datos con los que pandas pueda calcular

Las fechas llegan como cadenas, números y lecturas del reloj, pero el análisis necesita una representación coherente. Aprende a convertir esas entradas en momentos y duraciones, comprobar las conversiones fallidas y leer componentes útiles del calendario. Los ejemplos distinguen una fecha y hora almacenada de su representación como texto, para que la ordenación, la selección y las operaciones aritméticas posteriores usen el significado del calendario. Pequeños detalles como los códigos de formato de mes y minuto y la resolución de almacenamiento pueden cambiar mucho un resultado.

1.1 Trabaja con marcas de tiempo, duraciones y componentes del calendario

Una fecha es más útil cuando pandas sabe que es una fecha. Una serie temporal vincula observaciones con momentos o intervalos de tiempo. Las lecturas de energía por hora forman una serie regular; los pedidos que llegan a intervalos desiguales forman una irregular. Un texto como «12/31/2024» puede ordenarse después de «03/01/2025», aunque diciembre llegó primero. Las cadenas ISO completas y coherentes se ordenan correctamente, pero los valores de fecha y hora también permiten la selección por calendario y las operaciones aritméticas.

Elige el objeto temporal adecuado

Python proporciona datetime, date y timedelta. En pandas, un Timestamp contiene un momento, una columna de fechas y horas tiene el tipo de datos datetime64[unit] y un DatetimeIndex contiene etiquetas de fila de fecha y hora. NaT indica una fecha u hora faltante. Detéctala con pd.isna(); restar una fecha u hora faltante produce otra fecha u hora faltante.

La unidad de datetime64[us] es el microsegundo, la resolución de almacenamiento. Otras unidades incluyen segundos (s), milisegundos (ms) y nanosegundos (ns). pandas 3 normalmente interpreta el texto con resolución de microsegundos y usa nanosegundos cuando el texto los necesita. Una resolución más fina usa más parte del intervalo de enteros: las fechas en nanosegundos solo abarcan de 1677 a 2262.

Calcula el tiempo transcurrido
import pandas as pd
start = pd.Timestamp("2025-03-10 18:00")
end = pd.Timestamp("2025-03-14 09:30")
elapsed = end - start
hours = elapsed / pd.Timedelta(hours=1)

elapsed es 3 días, 15 horas y 30 minutos. Los tres días aportan 72 horas, así que hours es 87,5. elapsed.total_seconds() da 315 000. Su atributo .days da solo 3; es el componente de días completos, no la duración completa en días. Crea duraciones con pd.Timedelta(hours=36) o interpreta varias con pd.to_timedelta(["1h", "90min"]).

Restar una marca de tiempo a una columna completa de fechas y horas produce duraciones fila por fila. Utiliza .dt.days para los componentes de días completos o divide la columna de duraciones entre un Timedelta de una unidad para obtener totales fraccionarios.

Lee componentes del calendario y redondea horas

En una columna, .dt.year, .dt.month, .dt.hour y .dt.quarter extraen componentes del calendario. .dt.day_of_week numera el lunes como 0 hasta el domingo como 6; .dt.day_name() da un nombre. El 14 de marzo de 2025 es viernes, con el número 4. Un índice utiliza estos atributos directamente: df.index.month. Los nombres day_of_week y day_of_year sustituyen a los nombres antiguos declarados obsoletos en pandas 3.1.

Un día de la semana puede convertirse en una clave de agrupación: df.groupby(df["timestamp"].dt.day_name())["kwh"].mean(). Agrupar por número de mes combina ese mes de distintos años; un período mensual mantiene cada año separado.

Para 09:37, .dt.floor("h") da 09:00, .dt.ceil("h") da 10:00 y .dt.round("15min") da 09:30. .dt.normalize() establece las horas a medianoche y conserva los valores de fecha y hora. En cambio, .dt.date produce objetos de fecha de Python y pierde las funciones de las columnas de fechas y horas.

Mantén explícitas las unidades numéricas

astype("int64") devuelve recuentos en la unidad propia de la columna. Un recuento en microsegundos es 1000 veces menor que el recuento en nanosegundos del mismo momento. Si un cálculo externo necesita nanosegundos, utiliza s.dt.as_unit("ns").astype("int64"); un Timestamp o un índice utiliza .as_unit("ns") directamente. Para el tiempo transcurrido, las operaciones con Timedelta evitan esa confusión de unidades.

Puntos clave

  • Un Timestamp es un momento; un Timedelta es tiempo transcurrido.
  • Utiliza Timedelta de una unidad para obtener duraciones completas, incluidas las fracciones.
  • Los atributos del calendario usan .dt en columnas y acceso directo en índices.
  • Las fechas y horas faltantes son NaT.
  • Los recuentos enteros de fechas y horas dependen de la resolución de almacenamiento.

1.2 Interpreta fechas a partir de texto y dales formato de salida

La interpretación da al texto un significado de calendario. Antes de convertir una columna de fechas, establece su formato y comprueba si contiene desfases, entradas no válidas o valores faltantes. ISO 8601 escribe primero el año, como en «2025-03-14T09:30:00», y evita la ambigüedad entre día y mes.

Indica el formato de origen

«03/04/2025» puede significar el 4 de marzo o el 3 de abril. pd.to_datetime("03/04/2025") lee primero el mes; dayfirst=True lee primero el día. Un formato conocido es más claro:

raw = pd.Series(["14/03/2025 18:45", "15/03/2025 09:00"])
parsed = pd.to_datetime(raw, format="%d/%m/%Y %H:%M")

%Y es un año de cuatro dígitos, %m un mes y %d un día. %H es una hora de reloj de 24 horas, %M un minuto y %S un segundo. Utiliza %I con %p para un reloj de 12 horas y AM/PM. %b y %B leen nombres de mes abreviados y completos. %M en mayúscula significa minutos, así que no puede sustituir a %m en minúscula para los meses.

Sin format, pandas infiere un formato a partir de la primera entrada presente y lo aplica a la columna. Con «03/04/2025» primero, un «13/04/2025» posterior falla al inferirse que el mes va primero. Cambiar el orden de las filas puede cambiar el formato inferido. format="ISO8601" gestiona variantes de ISO. format="mixed" interpreta las entradas individualmente, pero no puede resolver una convención de origen ambigua; limpia o comprueba primero esa convención.

Inspecciona las conversiones fallidas
raw = pd.Series(["2025-01-15", "not a date", None])
parsed = pd.to_datetime(raw, format="%Y-%m-%d", errors="coerce")
failed = parsed.isna() & raw.notna()

El resultado contiene el 15 de enero y dos valores NaT. parsed.isna().sum() es 2 porque incluye la entrada que ya faltaba. failed.sum() es 1 porque solo «not a date» estaba presente y no se pudo interpretar. Inspecciona raw[failed] antes de decidir si lo corriges o eliminas. La coerción permite que la carga continúe, pero también oculta errores de escritura como un mes imposible. La opción predeterminada errors="raise" se detiene ante entradas no válidas; pandas 3 eliminó errors="ignore".

Interpreta archivos y marcas de tiempo numéricas

pd.read_csv("meter.csv", parse_dates=["timestamp"], index_col="timestamp") solicita la interpretación de fechas y horas y un índice temporal. Comprueba los tipos de datos resultantes después de la carga. Las columnas de texto en pandas 3 usan el tipo de datos str; las versiones anteriores suelen mostrar object.

Une las cadenas de fecha y hora separadas con un espacio antes de interpretarlas. Las columnas llamadas year, month y day se pueden reunir directamente con pd.to_datetime(df[["year", "month", "day"]]).

Para los recuentos Unix, especifica la unidad. pd.to_datetime(1735689600, unit="s", utc=True) da la medianoche UTC del 1 de enero de 2025. El recuento en milisegundos es 1735689600000 con unit="ms". Usar la unidad equivocada cambia el momento interpretado.

Da formato solo para la presentación

parsed.dt.strftime("%d %b %Y") escribe texto como «15 Jan 2025». El método .isoformat() de un Timestamp escribe una cadena ISO. Los nombres de meses y días de la semana siguen la configuración regional del sistema; los ejemplos mostrados usan inglés. Conserva las fechas y horas durante el análisis y dales formato al exportar, porque las cadenas dejan de permitir operaciones aritméticas con fechas.

Puntos clave

  • Prefiere fechas ISO inequívocas cuando controles el origen.
  • Pasa explícitamente un formato de interpretación conocido.
  • Separa las entradas no válidas de los valores que ya faltaban.
  • Asocia los recuentos Unix con su unidad en segundos o milisegundos.
  • Da formato de texto al final del análisis.
  • %m significa mes; %M significa minuto.
2

Indexa, selecciona y compara datos por fecha y hora

Un índice temporal permite usar fechas como etiquetas de fila, pero las etiquetas necesitan comprobaciones cuidadosas antes de compararlas. Ordena las observaciones, decide qué significan las marcas de tiempo duplicadas y revela las fechas ausentes. Después selecciona períodos del calendario o franjas horarias recurrentes y compara los valores con otros anteriores. La distinción central es entre la posición de la fila y el tiempo real: una fila anterior puede corresponder a varios días antes y dos series se combinan haciendo coincidir las marcas de tiempo.

2.1 Crea y comprueba un índice temporal

Un índice temporal útil está interpretado, ordenado y comprobado. Una tabla puede contener varios eventos en un mismo momento, días ausentes o lotes desordenados. Cada situación cambia el significado de los cálculos posteriores.

Crea etiquetas de fila de fecha y hora
df["timestamp"] = pd.to_datetime(df["timestamp"], format="%Y-%m-%d %H:%M")
df = df.set_index("timestamp").sort_index()

set_index() desplaza la columna a las etiquetas de fila; no interpreta texto. Inspecciona df.index.dtype para comprobar que el tipo de datos sea de fecha y hora y df.index.is_monotonic_increasing para comprobar el orden cronológico. Un índice creciente permite horas consecutivas iguales, así que esta comprobación no establece la unicidad.

Un DatetimeIndex permite seleccionar fechas y remuestrear. Las etiquetas de texto no se convierten en un índice temporal solo porque parezcan fechas. También puedes dejar las marcas de tiempo en una columna: df.resample("D", on="timestamp") utiliza esa columna sin cambiar el índice. Un PeriodIndex es otra representación de serie temporal cuando las filas describen intervalos como meses.

Decide qué significan las horas repetidas

df.index.is_unique indica si todas las etiquetas son distintas. df.index.duplicated() marca las etiquetas repetidas después de la primera. Supón que dos lecturas, 3 y 5, comparten el 1 de enero y una lectura de 4 corresponde al 2 de enero. Promediar las lecturas duplicadas con df.groupby(level=0).mean() produce 4,0 en ambas fechas.

Esa operación es una decisión sobre los datos. Si las filas son compras separadas, sumarlas puede ser adecuado. Si una importación duplicó un registro, puede ser adecuado conservar la última copia con df[~df.index.duplicated(keep="last")]. No elimines transacciones válidas solo para que un índice sea único. Las operaciones que sitúan un valor en cada etiqueta de destino, incluidas reindex() y asfreq(), requieren etiquetas de origen únicas.

Distingue la frecuencia almacenada de la inferida

Un índice creado con pd.date_range() normalmente lleva .freq. Las marcas de tiempo interpretadas suelen tener .freq igual a None, incluso cuando corresponden a días consecutivos. pd.infer_freq(df.index) examina al menos tres marcas de tiempo y devuelve un alias como «D» o «ME» si encuentra un patrón regular. Un espaciado irregular devuelve None.

Los metadatos de frecuencia no son una comprobación de integridad. Para buscar filas diarias ausentes, crea el calendario que esperas:

calendar = pd.date_range(df.index.min(), df.index.max(), freq="D")
missing = calendar.difference(df.index)

Un día ausente no tiene fila. Se diferencia de una fila presente que contiene NaN. Un calendario limitado por el mínimo y el máximo observados no puede revelar fechas ausentes fuera de ese intervalo; utiliza el inicio y el final previstos del período de informe cuando los conozcas.

Prepárate para operaciones posteriores

La ordenación hace que los segmentos sean predecibles y es necesaria para las ventanas móviles basadas en el tiempo. Las filas ausentes importan incluso cuando un cálculo se ejecuta correctamente: shift(1) significa una fila hacia atrás y rolling(7) significa siete filas. Ninguno comprueba que cada fila represente un día. En una tabla larga, conserva también la clave de la serie, como el sensor o la tienda, para que las operaciones posteriores puedan ejecutarse por separado para cada serie.

Puntos clave

  • Interpreta las fechas antes de establecer el índice temporal y ordénalo.
  • Comprueba el orden y la unicidad por separado.
  • Trata las etiquetas duplicadas según lo que representen sus filas.
  • Compara con un calendario completo para encontrar fechas ausentes.

2.2 Selecciona filas por fecha y hora del día

Una vez que el índice contiene fechas y horas ordenadas, las cadenas de fecha se convierten en selectores útiles. Su precisión determina cuánto tiempo representan: un año, un mes, un día o un minuto concreto.

Selecciona un período completo del calendario

Para datos diarios de enero a marzo de 2025, ts.loc["2025"] selecciona los 90 días. ts.loc["2025-02"] selecciona los 28 días de febrero. En datos por hora, una cadena de día selecciona todo ese día, no solo la medianoche.

Utiliza también .loc en un DataFrame:

february = df.loc["2025-02", "kwh"]
spring_onward = df.loc["2025-03-01":]

En cambio, df["2025-02"] solicita una columna con ese nombre. La presencia de un índice temporal no convierte la selección de columnas con corchetes en una selección de filas.

Interpreta el extremo con precisión

Un segmento por etiquetas incluye ambos extremos. ts.loc["2025-01-30":"2025-02-02"] incluye el 30 y 31 de enero y el 1 y 2 de febrero. Un segmento por posiciones como ts.iloc[0:4] termina antes de la posición 4.

El final de un segmento con cadena parcial incluye todo el período indicado. En datos por hora, df.loc[:"2025-06-01"] incluye todo el 1 de junio. df.loc[:"2025-06-01 00:00"] termina a medianoche. Del mismo modo, un segmento que termina en «2025-02» incluye todo febrero. Elegir una cadena más precisa cambia el límite, así que escribe el punto de corte de acuerdo con la pregunta.

ts.truncate(before="2025-03-01") conserva desde el 1 de marzo en adelante. Su argumento after= recorta el otro extremo. Ordenar primero evita fallos que pueden ocurrir cuando los segmentos con cadenas de fecha se encuentran con etiquetas desordenadas.

Selecciona condiciones recurrentes del calendario

Los atributos del calendario producen máscaras booleanas:

weekends = df[df.index.day_of_week >= 5]
evening_march = df[(df.index.month == 3) & (df.index.hour >= 18)]

El lunes es 0, así que el sábado y el domingo son 5 y 6. Cada condición necesita paréntesis cuando se combina con & o |. Con una columna de fechas y horas, utiliza df["timestamp"].dt.day_of_week en lugar de un atributo del índice. La máscara de días de la semana selecciona un patrón recurrente del calendario; es diferente de seleccionar un intervalo continuo de fechas.

Selecciona una franja horaria en cada fecha

df.between_time("09:00", "17:00") selecciona esas horas cada día. Ambos extremos se incluyen por defecto, lo que da nueve filas en un día completo con datos por hora. inclusive="left" incluye las 09:00 y excluye las 17:00, lo que da ocho. df.at_time("12:00") selecciona exactamente el mediodía de cada día.

Una franja horaria puede cruzar la medianoche. between_time("22:00", "06:00") selecciona filas de las últimas horas de la noche y las primeras de la mañana a lo largo del índice. No selecciona un intervalo ininterrumpido entre dos fechas concretas. En un índice con zona horaria, la selección con cadenas de fecha usa la zona local del índice; convierte el índice antes de seleccionar un día de informe en otra zona.

Puntos clave

  • Una cadena parcial de fecha selecciona todo su período.
  • Los segmentos por etiquetas incluyen el extremo; los segmentos por posiciones excluyen la posición final.
  • Utiliza .loc para seleccionar fechas en un DataFrame.
  • Las máscaras de calendario y las franjas horarias seleccionan patrones recurrentes.
  • Comprueba la precisión de los extremos y la zona horaria antes de filtrar.

2.3 Compara valores a lo largo del tiempo mediante desplazamientos, diferencias y variaciones porcentuales

Una variación necesita un punto de comparación claro. «Anterior» puede significar la fila observada anterior, el día natural anterior o el mismo mes de hace un año. Elige ese significado antes de calcular un rezago o una tasa de crecimiento.

Sitúa los valores anteriores junto a los actuales

Para los recuentos de visitantes 200, 210 y 189 del 3 al 5 de marzo, s.shift(1) da NaN, 200 y 210. Desplaza los valores una fila hacia abajo y conserva las etiquetas. La nueva primera posición está vacía porque no existe una observación anterior. shift(-1) da 210, 189 y NaN: un adelanto que lleva el valor siguiente a la fila actual.

df["previous"] = df["visitors"].shift(1)
df["change"] = df["visitors"].diff()
df["growth"] = df["visitors"].pct_change()

diff() resta el valor anterior, lo que da NaN, 10 y −21. pct_change() divide el valor actual entre el anterior y resta 1, lo que da NaN, 0,05 y −0,10. Son fracciones: 0,05 significa 5 %, no 0,05 %. La salida de coma flotante puede tener pequeños dígitos adicionales; redondea para mostrarla después de calcular.

Elige el rezago en filas o en tiempo

pct_change(7) compara con siete filas antes. Solo corresponde al mismo día de la semana anterior cuando hay exactamente una fila por día sin fechas ausentes. En una serie mensual completa, pct_change(12) da la variación interanual.

shift(1, freq="D") desplaza las marcas de tiempo un día hacia adelante y deja los valores asociados a esas etiquetas desplazadas. Conserva todos los valores. Las operaciones aritméticas con el original se alinean entonces por fecha:

previous_day = s.shift(1, freq="D")
daily_change = s - previous_day

Si el origen solo tiene observaciones el lunes y el jueves, shift(1) sin frecuencia compara el jueves con el lunes. Un desplazamiento de fecha ofrece una comparación con el miércoles; si falta el miércoles, la variación diaria del jueves es un valor faltante. Rellenar esa ausencia es una decisión aparte sobre los datos.

Ten en cuenta que las operaciones aritméticas alinean etiquetas

Dos Series se combinan por marca de tiempo, no por posición de fila. Suma los valores 200, 210 y 189 del 3, 4 y 5 de marzo a los valores 1 y 1 del 4 y 7 de marzo. Solo el 4 de marzo tiene dos observaciones, así que su suma es 211. La unión de fechas es el 3, 4, 5 y 7 de marzo; los demás resultados son faltantes.

Utiliza s.add(other, fill_value=0) cuando una observación ausente signifique realmente cero, como en un recuento de eventos verificado. No es una solución general para las lecturas faltantes de sensores.

Reinicia las comparaciones por serie

Ordena una tabla larga por su clave de serie y fecha, y después calcula dentro de los grupos. df.groupby("store")["sales"].pct_change() compara cada tienda solo consigo misma. Para la tienda A que vende 100 y luego 110 y la tienda B que vende 50 y luego 40, las tasas de crecimiento son un valor faltante, 0,10, un valor faltante y −0,20. Un cálculo sin agrupar para toda la columna compararía la primera venta de B con la última venta de A. Ese resultado numérico describiría un cambio de tienda, no un crecimiento a lo largo del tiempo.

Puntos clave

  • Un rezago sitúa valores anteriores junto a valores posteriores.
  • pct_change() devuelve una fracción; multiplícala por 100 para expresarla como porcentaje.
  • Los desplazamientos de filas y de fechas responden a preguntas distintas.
  • Las operaciones aritméticas alinean marcas de tiempo, no posiciones.
  • Calcula las variaciones por separado dentro de cada serie.
3

Genera fechas y utiliza frecuencias, desplazamientos y períodos

Las reglas de calendario hacen fiable el trabajo repetido con fechas. Genera una secuencia completa a partir de una frecuencia, desplázate al siguiente fin de mes o día hábil y etiqueta meses o trimestres completos con períodos. Cada representación responde a una pregunta distinta: una duración cuenta el tiempo transcurrido, un desplazamiento sigue una regla de calendario y un período nombra un intervalo. Interpretar con cuidado los puntos de anclaje y los extremos evita errores de una unidad y confusiones entre ejercicios fiscales.

3.1 Crea secuencias regulares de fechas con alias de frecuencia

Una secuencia regular de fechas es un calendario que puedes generar en lugar de escribir cada etiqueta. Puede etiquetar datos de prueba, definir una cuadrícula de informe esperada o revelar observaciones ausentes después de reindexar.

Especifica un inicio y una regla
ends = pd.date_range("2025-01-01", periods=4, freq="ME")

Las cuatro marcas de tiempo son el 31 de enero, el 28 de febrero, el 31 de marzo y el 30 de abril. «ME» significa fin de mes, así que la primera fecha es el primer fin de mes igual o posterior al inicio. Una frecuencia regular puede seguir una regla de calendario aunque los intervalos de tiempo transcurrido tengan distinta duración.

Normalmente, proporciona dos de start, end y periods, además de freq. Sin una frecuencia explícita, se utiliza por defecto un día natural. periods es un recuento de marcas de tiempo, no de intervalos entre ellas: cuatro marcas de tiempo por hora contienen tres intervalos.

Interpreta los alias habituales
ReglaAliasEjemplo de uso
Día natural o hábilD, BFechas diarias o de lunes a viernes
Semana anclada a un díaW, W-MONDomingos o lunes
Límite de mesMS, MEPrimer o último día natural
Límite de trimestreQS, QEInicio o fin de trimestre
Límite de añoYS, YEInicio o fin de año
Intervalo fijo de relojh, min, s, msDe horas a milisegundos

Los múltiplos expresan intervalos más amplios: «15min», «2h» y «90min». Empezar a las 08:00 con cuatro períodos de «90min» da 08:00, 09:30, 11:00 y 12:30. «1h30min» expresa el mismo espaciado.

Las frecuencias de marcas de tiempo de pandas 3 usan «ME», «QE», «YE», «BME», «h», «min», «s», «ms» y «us». Los alias antiguos «M», «Q», «Y» o «A», «BM», «H», «T», «S», «L» y «U» ya no funcionan en estas operaciones con marcas de tiempo. Los períodos mensuales siguen usando «M» porque un período describe un intervalo.

Sigue los puntos de anclaje y los días hábiles

Una secuencia anclada no fuerza la inclusión de la fecha de inicio proporcionada en la salida. Empezar el 15 de enero de 2025 con freq="MS" da primero el 1 de febrero. En enero de 2025, «W-MON» da el 6, 13, 20 y 27 de enero; «W» sin más da los domingos. «WOM-3FRI» significa el tercer viernes de cada mes.

«B» omite los fines de semana, pero no conoce los días festivos locales. Marzo de 2025 contiene 21 fechas de lunes a viernes. Un calendario personalizado puede excluir un festivo proporcionado:

pd.bdate_range("2025-03-01", "2025-03-31",
               freq="C", holidays=["2025-03-17"])

Esa secuencia contiene 20 fechas. La lista de festivos es explícita; no se infiere un país a partir de una zona horaria o un idioma.

Cuenta los extremos con cuidado

Los puntos de inicio y fin que corresponden a la frecuencia se incluyen por defecto. Por horas, desde la medianoche del 1 de enero hasta la medianoche del 2 de enero se obtienen 25 marcas de tiempo. Utiliza periods=24 para obtener exactamente 24 lecturas por hora, o inclusive="left" para excluir el final. normalize=True establece las horas de inicio y fin a medianoche. Añade tz="Asia/Tokyo" cuando las etiquetas generadas deban llevar una zona.

Puntos clave

  • Los alias de frecuencia expresan intervalos de reloj o puntos de anclaje del calendario.
  • Una secuencia anclada comienza en la primera fecha que cumple la regla.
  • Las secuencias de días hábiles necesitan festivos explícitos.
  • Cuenta las marcas de tiempo y comprueba la inclusión de los extremos por separado.
  • Utiliza los alias actuales de pandas 3 para las frecuencias de marcas de tiempo.

3.2 Desplaza fechas mediante reglas de calendario

«Un mes después» es una instrucción de calendario. «Treinta días después» es tiempo transcurrido. Los resultados pueden diferir porque no todos los meses y años contienen el mismo número de días.

Distingue la duración del desplazamiento por calendario

Un Timedelta añade una cantidad fija de tiempo transcurrido. Un DateOffset sigue los campos del calendario. Desde el 31 de enero de 2025:

t = pd.Timestamp("2025-01-31")
t + pd.DateOffset(months=1)   # February 28
t + pd.Timedelta(days=30)    # March 2

Para el DateOffset, primero se pasa a febrero y después se conserva el día 31 si existe. No existe, así que pandas ajusta la fecha al último día válido de febrero. Desde el 31 de enero de 2024, el resultado es el 29 de febrero porque es un año bisiesto. pd.Timedelta(months=1) no es válido: un mes no tiene una única duración fija.

La misma distinción se aplica a los años. Desde el 1 de enero de 2024, 365 días transcurridos terminan el 31 de diciembre de 2024. pd.DateOffset(years=1) termina el 1 de enero de 2025. Utiliza la unidad indicada por la pregunta real en lugar de sustituirla por un número conveniente de días.

Desplázate a un punto de anclaje del calendario

pd.offsets.MonthEnd(1) desplaza al siguiente fin de mes. Empezar el 15 de enero de 2025 da el 31 de enero. Empezar el 31 de enero da el 28 de febrero. El recuento de uno significa avanzar hasta un punto de anclaje, así que una fecha que ya cumple la regla también se desplaza.

MonthEnd(0) desplaza una fecha hacia adelante hasta el fin de su mes actual, pero deja sin cambios una fecha que ya es fin de mes. Es útil para etiquetar cada observación con el final de su mes:

month_labels = df.index + pd.offsets.MonthEnd(0)

Un desplazamiento también tiene rollforward() y rollback(). Para el 15 de enero, el punto de anclaje de MonthEnd más cercano hacia adelante es el 31 de enero y el más cercano hacia atrás es el 31 de diciembre de 2024. Estas operaciones seleccionan el punto de anclaje válido más cercano en una dirección.

Desplázate por días hábiles

El 14 de marzo de 2025 es viernes. Añadir pd.offsets.BDay(1) da el lunes 17 de marzo. Añadir un día de tiempo transcurrido da el sábado 15 de marzo. Una regla estándar de días hábiles omite los fines de semana; para los festivos se necesita un calendario personalizado proporcionado explícitamente.

Las cadenas de frecuencia son nombres cortos de objetos de desplazamiento: «ME» corresponde a MonthEnd, «B» a BusinessDay y «W-MON» a una semana anclada en lunes. Esto permite que el mismo significado de calendario rija una secuencia, una regla de remuestreo o un desplazamiento de fecha.

Conserva la hora deseada durante el horario de verano

En pandas 3, pd.offsets.Day(1) significa un día natural y conserva la hora local del reloj. pd.Timedelta(days=1) añade exactamente 24 horas. Desde el mediodía del 29 de marzo de 2025 en Ámsterdam, el desplazamiento de calendario termina al mediodía del 30 de marzo, después de solo 23 horas transcurridas. El Timedelta termina a las 13:00. Por tanto, una cita local recurrente y el tiempo de funcionamiento medido de un equipo necesitan operaciones distintas.

Puntos clave

  • Los meses y los años son reglas de calendario, no duraciones fijas.
  • Un desplazamiento mensual se ajusta al último día válido del mes de destino.
  • MonthEnd(1) avanza desde una fecha que ya es fin de mes; MonthEnd(0) la conserva.
  • Los desplazamientos de días hábiles omiten los fines de semana.
  • Un día natural y 24 horas transcurridas pueden diferir.

3.3 Trabaja con meses completos, trimestres y ejercicios fiscales como períodos

Un total de ventas mensuales pertenece a un mes completo. Es posible etiquetarlo con una marca de tiempo, pero un Period indica directamente su intervalo. Un período combina un valor con una frecuencia, así que «2025-03» con frecuencia «M» significa todo marzo de 2025.

Representa y desplaza intervalos
march = pd.Period("2025-03", freq="M")
months = pd.period_range("2025-01", "2025-04", freq="M")

months es un PeriodIndex de cuatro elementos con tipo de datos period[M]. El start_time de marzo es el 1 de marzo a medianoche; su end_time es el 31 de marzo a las 23:59:59,999999 con resolución de microsegundos. El final es el último momento, no la medianoche al comienzo del último día.

Las operaciones aritméticas con períodos avanzan en la unidad propia del período. march + 1 es abril de 2025. Junio menos marzo con frecuencia mensual da un desplazamiento de tres fines de mes, cuyo .n es 3. Un período mensual también conoce .days_in_month: febrero de 2025 tiene 28 días.

Convierte momentos en intervalos y viceversa
monthly_labels = df.index.to_period("M")
column_labels = df["date"].dt.to_period("M")
start_labels = monthly_labels.to_timestamp()
end_labels = monthly_labels.to_timestamp(how="end")

Cada marca de tiempo de marzo corresponde al mismo período mensual. Volver a convertir ese período da su inicio por defecto o su final cuando se solicita. Esto no recupera el día y la hora originales de una observación: la conversión a período descartó ese detalle.

Mantén separadas las familias de alias. Un intervalo mensual usa «M» en Period y period_range. Una marca de tiempo de fin de mes usa «ME» en date_range y en el remuestreo de fechas y horas. Los dos nombres describen distintos tipos de etiquetas.

Cambia la frecuencia de un período

.asfreq() de un período selecciona un período que lo contiene o está contenido en él con una frecuencia distinta. march.asfreq("D", how="start") da el 1 de marzo como período diario; how="end" da el 31 de marzo. Un período anual convertido a «M» con how="start" da enero.

Esto selecciona un período de límite; no distribuye un total mensual entre los días. Para una serie con PeriodIndex, el remuestreo puede agregar intervalos mensuales en intervalos trimestrales. Los recuentos de días de cada mes de 2025 suman los totales trimestrales 90, 91, 92 y 92.

Interpreta las etiquetas de trimestres fiscales

Un trimestre fiscal se nombra dentro de un ejercicio fiscal cuyo mes de cierre es explícito. Con «Q-JUN», el ejercicio fiscal 2025 termina en junio de 2025. Por tanto, su primer trimestre va de julio a septiembre de 2024:

q = pd.Period("2025Q1", freq="Q-JUN")

Con «Q-MAR», el 10 de mayo de 2025 corresponde a 2026Q1 porque ese ejercicio fiscal termina en marzo de 2026. El año de una etiqueta fiscal no tiene por qué coincidir con el año natural de su primer día. Para filtrar marcas de tiempo, seleccionar los momentos anteriores al inicio del siguiente período suele ser más claro que construir la última fracción de segundo del período actual.

Puntos clave

  • Los períodos describen intervalos y se desplazan en su propia unidad de frecuencia.
  • Convertir a un período descarta los detalles más precisos de la marca de tiempo.
  • Los alias de frecuencia de períodos y marcas de tiempo difieren.
  • Los ejercicios fiscales se etiquetan por el año en que terminan.
4

Cambia la frecuencia de una serie temporal mediante remuestreo

Cambiar la frecuencia cambia la pregunta que se plantea sobre las observaciones. Las lecturas detalladas pueden convertirse en totales diarios o medias mensuales; una serie con pocas observaciones puede convertirse en una cuadrícula más fina con posiciones vacías. Elige las agregaciones y los métodos de relleno según el significado de los valores y después comprueba los límites de los intervalos de agrupación temporal. Cuando una tabla contiene varias tiendas o sensores, conserva sus identidades en la agrupación para mantener separados los historiales resultantes.

4.1 Reduce la frecuencia temporal calculando totales, medias y otros resúmenes

El remuestreo responde a preguntas como «¿Cuánta energía se consumió cada día?» o «¿Cuál fue la temperatura media de cada mes?». Agrupa las observaciones en intervalos de tiempo y después aplica una agregación.

Elige un estadístico adecuado para la cantidad
daily = df.resample("D").agg({"kwh": "sum", "temp_c": "mean"})

La energía en kWh y la precipitación en mm se acumulan con el tiempo. La temperatura es un nivel, así que una media la describe de forma más útil que una suma. last() es adecuado para un saldo de cierre, mientras que max() encuentra un máximo. Las ventas diarias se pueden sumar para obtener las ventas totales mensuales o promediar para obtener las ventas medias por día observado; la pregunta decide.

resample() devuelve un Resampler hasta que llamas a una agregación como sum(), mean(), count() o agg(). Utiliza on="date" cuando las fechas y horas estén en una columna en lugar del índice.

Interpreta los intervalos de calendario y la cobertura parcial

Una serie diaria de unos del 1 de enero al 30 de abril de 2025 da los totales mensuales 31, 28, 31 y 30 con resample("ME").sum(). «MS» da los mismos totales mensuales con etiquetas de inicio. El remuestreo a fin de trimestre da 90 para enero–marzo y 30 para un segundo trimestre que solo contiene abril. Una etiqueta del 30 de junio no demuestra que se hayan observado mayo y junio.

Los intervalos semanales «W» terminan en domingo. Los valores diarios del 1 al 14 desde el lunes 3 de marzo suman 28 para la semana etiquetada con el 9 de marzo y 77 para la semana etiquetada con el 16 de marzo. «W-MON» termina en lunes; entonces el primer intervalo contiene solo el 3 de marzo. Comprueba el día de anclaje antes de interpretar una etiqueta como el inicio de una semana.

Distingue la pertenencia de la etiqueta

closed controla qué límite pertenece a un intervalo. label controla la marca de tiempo mostrada en el resultado. Para la mayoría de las reglas, incluidas «5min», «h», «D» y «MS», ambos son «left» por defecto.

Los valores del 0 al 9, uno por minuto desde las 00:00, producen dos sumas predeterminadas de cinco minutos: 10 con la etiqueta 00:00 y 35 con la etiqueta 00:05. El primer intervalo contiene desde las 00:00 hasta las 00:04. Con closed="right", label="right", los resultados son 0 a las 00:00, 15 a las 00:05 y 30 a las 00:10. El intervalo central contiene desde las 00:01 hasta las 00:05. Cambiar solo la etiqueta no cambiaría la pertenencia.

Las reglas de fin como «ME», «QE», «YE», «W» y «BME» usan por defecto el cierre por la derecha y las etiquetas a la derecha. Los intervalos de duración fija normalmente se alinean desde la medianoche del primer día, así que los límites de 15 minutos son 00:00, 00:15 y así sucesivamente.

Distingue los intervalos vacíos de los ceros reales

El sum() de un día vacío es 0, count() es 0 y mean() es NaN. Utiliza sum(min_count=1) para conservar la ausencia de datos cuando no haya ninguna lectura disponible. Así se pueden distinguir un cero registrado y una lectura ausente.

Para varios resúmenes de una serie, .ohlc() da apertura, máximo, mínimo y cierre: el primer valor observado, el máximo, el mínimo y el último de cada intervalo. Las lecturas 10, 12 y 11 dan apertura 10, máximo 12, mínimo 10 y cierre 11. La apertura y el cierre dependen del orden temporal, no del tamaño numérico.

Puntos clave

  • Elige las agregaciones según el significado de los valores.
  • closed determina la pertenencia; label determina la hora mostrada.
  • Las etiquetas semanales normalmente indican el día en que termina la semana.
  • Comprueba si el primer y el último intervalo están incompletos.
  • sum(min_count=1) conserva los intervalos vacíos como valores faltantes.
  • OHLC significa primer valor, máximo, mínimo y último valor.

4.2 Aumenta la frecuencia temporal y rellena los valores faltantes de una serie

Una cuadrícula más fina crea posiciones, no mediciones. Antes de rellenarlas, decide si cada valor representa un estado, un recuento, una medición que cambia de forma gradual o un total durante un intervalo.

Muestra las nuevas posiciones
s = pd.Series([10.0, 16.0],
              index=pd.to_datetime(["2025-06-01", "2025-06-04"]))
daily = s.asfreq("D")

El resultado diario es 10, NaN, NaN, 16. Aquí s.resample("D").asfreq() da la misma cuadrícula. Los valores se conservan en las marcas de tiempo coincidentes; las nuevas fechas no contienen ninguna observación original.

Rellena según el significado
MétodoResultado del 1 al 4 de junioSignificado adecuado
ffill()10, 10, 10, 16Un estado se mantiene hasta que cambia
bfill()10, 16, 16, 16Se usa un valor posterior para posiciones anteriores
interpolate()10, 12, 14, 16El cambio se estima siguiendo una línea recta

El ajuste de un termostato se mantiene hasta que alguien lo cambia, así que el relleno hacia adelante es útil. Un nivel de agua que cambia gradualmente puede justificar la interpolación. El cero solo es adecuado para un recuento de eventos cuando el registro ausente significa que no hubo ningún evento. Una interrupción del sensor no demuestra que la medición sea cero.

El ejemplo de interpolación usa una cuadrícula diaria regular. El cambio total es 6 a lo largo de tres pasos de un día, así que cada paso añade 2. Los dos valores interiores son estimaciones, no mediciones recuperadas.

El relleno hacia atrás utiliza información futura. No puede describir lo que un observador sabía en cada momento anterior. El relleno hacia adelante respeta esa dirección temporal, pero los intervalos largos sin datos pueden hacer que un estado trasladado quede desactualizado. daily.ffill(limit=1) rellena una posición después de una lectura, lo que da 10, 10, NaN, 16 en este ejemplo.

Utiliza límites explícitos para el informe

asfreq("D") abarca desde la primera hasta la última marca de tiempo de origen. Reindexa cuando el calendario deba extenderse más:

calendar = pd.date_range("2025-06-01", "2025-06-05", freq="D")
complete = s.reindex(calendar)

Ahora también se ve el 5 de junio. fill_value=0 al reindexar rellena las etiquetas recién creadas, lo que es útil para días en los que se ha comprobado que no hubo eventos. No sustituye los valores faltantes que ya existían en el origen. Tanto la reindexación como asfreq() necesitan etiquetas de origen únicas.

Distingue el muestreo de la agregación

asfreq() selecciona valores en las marcas de tiempo de destino. No resume las observaciones que hay entre ellas. Para 48 valores por hora numerados del 0 al 47, asfreq("D") selecciona las lecturas de medianoche 0 y 24. En cambio, resample("D").sum() da 276 y 852 al sumar todos los valores por hora de cada día.

Un total mensual no se puede rellenar hacia adelante en cada día y después sumar: eso contaría el mismo total repetidamente. Un reparto diario uniforme requiere dividir entre el número de días del mes. Es una suposición de reparto, distinta de trasladar un estado o estimar una medición que cambia gradualmente.

Puntos clave

  • Una cuadrícula más fina añade posiciones vacías, no observaciones.
  • Elige el relleno según el significado de la cantidad y la dirección temporal.
  • Limita el relleno cuando deban seguir visibles los intervalos largos sin datos.
  • asfreq() selecciona puntos; el remuestreo con agregación resume intervalos.

4.3 Remuestrea varias series a la vez mediante grupos

Una tabla larga puede contener muchas series en una sola columna de valores. Una clave de tienda distingue las tiendas y una clave de sensor distingue los sensores. Agrupa por esa identidad y por tiempo cuando la pregunta requiera un historial separado para cada serie.

Combina una clave de serie con una regla temporal
monthly = df.groupby([
    "store", pd.Grouper(key="date", freq="ME")
])["sales"].sum()

pd.Grouper sitúa una regla de intervalos temporales dentro de groupby. key= indica una columna de fechas y horas; level= puede indicar un nivel de índice de fechas y horas. El resultado tiene un nivel de índice para la tienda y otro para el fin de mes. Seleccionar la columna numérica centra la agregación en las ventas.

Supón que la tienda A vende 100 el 5 de enero, 150 el 20 de enero y 120 el 3 de febrero. La tienda B vende 80 el 11 de enero, 90 el 14 de febrero y 60 el 25 de febrero. El resultado agrupado es A: enero 250, febrero 120; B: enero 80, febrero 150. Remuestrear toda la tabla sin la clave de tienda combinaría las tiendas en enero 330 y febrero 270.

Remuestrea dentro de cada grupo

Una segunda forma establece primero la fecha como índice:

monthly = (df.set_index("date")
             .groupby("store")["sales"]
             .resample("ME").sum())

Produce los mismos totales para las combinaciones de tienda y mes observadas. Las dos formas difieren cuando una tienda no tiene filas en un mes intermedio. Si A aparece solo en enero y marzo, el remuestreo por grupos crea un intervalo de febrero entre la primera y la última fecha de A; sum() sin más da cero ahí. Agrupar por tienda y un Grouper conserva las combinaciones que contienen filas, así que la combinación de A y febrero está ausente.

Una combinación ausente, un intervalo vacío resumido como cero y una medición faltante son estados de datos distintos. Decide cuál debe mostrar el informe. Utiliza una reindexación explícita cuando todas las tiendas deban compartir un calendario más amplio que su intervalo observado. Utiliza min_count=1 con una suma cuando un intervalo vacío deba seguir siendo un valor faltante.

Reestructura para comparar

monthly.unstack("store") desplaza el nivel de tienda a las columnas y deja los meses en las filas. En el ejemplo, enero tiene A = 250 y B = 80; febrero tiene A = 120 y B = 150. Una combinación faltante de tienda y mes se convierte en NaN; unstack("store", fill_value=0) sustituye las combinaciones faltantes por cero cuando ese significado es adecuado.

Mantén separados los años cuando sea necesario

Un agrupador temporal con «ME» mantiene separados enero de 2024 y enero de 2025. Agrupar por df["date"].dt.month conserva solo los números de mes y combina ambos eneros. La primera forma responde a «¿Qué ocurrió cada mes?». La segunda permite una comparación estacional, como las ventas medias de enero a lo largo de varios años. La elección depende de la identidad temporal que necesites conservar.

Puntos clave

  • Agrupa por identidad de serie y por tiempo para conservar historiales separados.
  • El remuestreo por grupos y un agrupador temporal difieren para los meses vacíos.
  • unstack() facilita la comparación de series en columnas.
  • Los números de mes combinan años; los intervalos temporales mensuales los mantienen separados.
5

Suaviza y resume datos con ventanas móviles y expansivas

Los estadísticos de ventana describen cómo cambia una serie sin reducirla a un único número global. Un cálculo móvil sigue las filas recientes o el tiempo transcurrido reciente, un cálculo expansivo conserva el historial y una media ponderada exponencialmente favorece gradualmente las observaciones más nuevas. Examina qué valores entran en cada resultado, cómo le afectan los datos faltantes y dónde se etiqueta. Estas decisiones determinan qué puede decirte un valor suavizado.

5.1 Calcula estadísticos móviles sobre un número fijo de filas

Una ventana móvil resume repetidamente un grupo de filas que se desplaza. En cada fila nueva, la ventana incorpora el valor actual y acaba descartando el más antiguo. La longitud de la ventana controla cuánto se suaviza la variación a corto plazo.

Trabaja con una ventana cada vez

Para los valores 4, 8, 6, 10 y 12:

s = pd.Series([4, 8, 6, 10, 12])
s.rolling(3).mean()

La primera ventana completa es [4, 8, 6], con un total de 18 y una media de 6. La siguiente es [8, 6, 10], con una media de 8. La última es [6, 10, 12], con una media aproximada de 9,333. Los resultados predeterminados son NaN, NaN, 6, 8 y 9,333 porque las dos primeras filas aún no tienen tres observaciones.

Controla los requisitos de datos y la ubicación

min_periods establece el número requerido de valores presentes. Para una ventana definida por número de filas, por defecto es el tamaño completo de la ventana. Con min_periods=1, las primeras medias usan un valor y después dos: 4 y 6. Sus muestras más pequeñas las hacen menos estables que las medias posteriores de tres valores.

Los valores faltantes siguen ocupando posiciones de fila. En [4, NaN, 6, 10, 12], una ventana de tres filas que contiene el valor faltante solo tiene dos observaciones válidas. min_periods=2 permite calcular la media de [4, NaN, 6], que es 5; la opción predeterminada no lo permite.

Los resultados normalmente corresponden a la última fila de la ventana. Con center=True, las mismas tres medias de ventanas completas aparecen en las filas centrales, lo que da NaN, 6, 8, 9,333, NaN. Un valor centrado utiliza observaciones posteriores a su etiqueta. Utiliza ventanas retrospectivas para describir lo que se conocía en cada momento.

Resume más que la media

Las mismas ventanas admiten sum(), max(), min() y std(). pandas usa por defecto la desviación estándar muestral: [4, 8, 6] tiene una desviación estándar de 2. Una función personalizada puede calcular un rango:

s.rolling(3).apply(lambda v: v.max() - v.min(), raw=True)

Los rangos de las ventanas completas son 4, 4 y 6. raw=True pasa los valores del arreglo a la función. Dos series alineadas también pueden compartir una ventana: a.rolling(3).corr(b) mide la correlación entre las últimas tres observaciones emparejadas, de modo que la relación puede variar con el tiempo.

Elige una longitud y una agrupación significativas

Con una fila diaria completa por día, una media de siete filas contiene una vez cada día de la semana y promedia un componente semanal fijo y repetitivo hasta eliminarlo. Una media de doce filas hace lo mismo con un componente anual fijo en datos mensuales completos. Las ventanas más largas suavizan más, pero responden más tarde a los cambios de dirección; una media retrospectiva de n filas tiene aproximadamente media ventana de retraso, unas (n − 1) / 2 filas.

Las filas no son días. Siete lecturas con fechas ausentes pueden abarcar más de una semana. Utiliza una ventana temporal cuando la pregunta indique tiempo transcurrido. En una tabla larga, ordena cada serie por tiempo y ejecuta las ventanas dentro de su grupo: df.groupby("store")["sales"].rolling(2).sum(). Esto evita que una ventana pase de los datos de una tienda a los de otra.

Puntos clave

  • Una ventana de filas cuenta las filas, incluidas las posiciones con valores faltantes.
  • min_periods cuenta las observaciones válidas.
  • Las ventanas centradas incluyen valores posteriores a sus etiquetas.
  • Las ventanas más largas suavizan más y responden más lentamente.
  • Aplica las ventanas por separado dentro de cada serie.
  • Los métodos móviles pueden resumir la dispersión y las relaciones, además de los niveles.

5.2 Utiliza ventanas basadas en el tiempo para datos irregulares

Los eventos irregulares requieren ventanas definidas por tiempo. «Pedidos de los últimos tres días» debe conservar la misma duración aunque haya muchos pedidos un día y ninguno al siguiente.

Define una ventana de tiempo transcurrido
s = pd.Series([5, 3, 4, 6], index=pd.to_datetime([
    "2025-05-01", "2025-05-02", "2025-05-05", "2025-05-06"
]))
s.rolling("3D").sum()

Los resultados son 5, 8, 4 y 10. A diferencia de rolling(3), la cadena «3D» define un intervalo de tres días. El número de filas dentro de ese intervalo puede variar. Ordena primero el DatetimeIndex; las ventanas temporales requieren tiempos monótonos. Un DataFrame puede usar una columna de fechas y horas ordenada con on="date".

Comprueba el límite antes de sumar

Por defecto, la ventana incluye el momento actual y excluye el instante de exactamente tres días antes. A medianoche del 5 de mayo, el intervalo va desde justo después de la medianoche del 2 de mayo hasta la medianoche del 5 de mayo. La lectura del 2 de mayo está exactamente en el límite excluido, así que solo contribuye el valor 4 del 5 de mayo.

El 6 de mayo, la ventana comienza justo después del 3 de mayo e incluye los valores 4 y 6, que suman 10. Con closed="both", la ventana del 5 de mayo también incluye el 2 de mayo y suma 7. La elección del límite puede cambiar un resultado aunque los datos y la duración sigan siendo los mismos.

Una ventana de dos filas en esta serie da NaN, 8, 7 y 10. El 5 de mayo incluye la fila anterior del 2 de mayo. Eso responde a «las dos últimas lecturas», una pregunta distinta de «los últimos tres días».

Establece un requisito de datos

El min_periods de una ventana temporal es 1 por defecto. Por tanto, la primera observación puede producir un resultado de inmediato. s.rolling("3D").count() da 1, 2, 1 y 2 lecturas, lo que muestra cómo cambia la cantidad de datos que sustenta el resultado. Una media basada en una lectura y una media basada en muchas son cálculos válidos, pero tienen distinto respaldo de datos.

Con min_periods=2, las sumas son NaN, 8, NaN, 10. La duración no ha cambiado; ahora el cálculo requiere al menos dos observaciones presentes dentro de esa duración. Un intervalo temporal más amplio no garantiza por sí mismo más observaciones.

Utiliza duraciones fijas y separa las series

Una ventana móvil basada en el tiempo requiere una duración fija como «30min», «24h» o «7D». Una regla de fin de mes como «1ME» tiene una duración variable y no puede definir este tipo de ventana móvil. Utiliza una duración fija indicada, como «30D», si esa es la regla deseada, o agrega primero en intervalos mensuales cuando la pregunta se refiera a meses del calendario.

Para historiales separados de clientes, df.groupby("customer").rolling("30D", on="date")["amount"].sum() mantiene juntas las transacciones de cada cliente. Las horas deben estar ordenadas dentro de cada cliente. El resultado añade la clave de grupo como nivel del índice y conserva qué serie describe cada ventana.

Puntos clave

  • Las ventanas temporales seleccionan por duración y pueden contener distintos números de filas.
  • El límite izquierdo se excluye por defecto y el momento actual se incluye.
  • El min_periods de una ventana temporal es 1 por defecto.
  • Los meses del calendario no pueden servir como duraciones fijas de ventanas móviles.

5.3 Calcula sumas acumuladas, máximos acumulados y medias ponderadas exponencialmente

Algunas preguntas necesitan todo el historial: «¿Cuánto se ha acumulado?» o «¿Cuál es el valor más alto hasta ahora?». Otras deben favorecer las observaciones recientes sin descartar bruscamente el pasado. Los cálculos expansivos y ponderados exponencialmente sirven para estos fines distintos.

Amplía el historial una fila cada vez

Para los valores 4, 8, 6, 10 y 12, s.expanding().mean() da 4, 6, 6, 7 y 8. El cuarto resultado usa los cuatro valores: su total es 28 y su media es 7. expanding().sum() da 4, 12, 18, 28 y 40, igual que cumsum() en esta serie completa. expanding().max() da 4, 8, 8, 10 y 12, igual que cummax().

Las ventanas expansivas requieren por defecto una observación. Conservan todas las observaciones anteriores con el mismo peso. En las últimas etapas de una serie larga, un valor nuevo solo aporta una pequeña parte de todo ese historial, por lo que una media acumulada reacciona lentamente.

Las sumas acumuladas pueden reiniciarse en un límite:

ytd = df.groupby(df.index.year)["sales"].cumsum()
by_store = df.groupby("store")["sales"].cumsum()

Ordena dentro del historial correspondiente antes de acumular. Una suma acumulada sin agrupar sobre tiendas intercaladas las mezcla.

Mide la distancia por debajo de un máximo acumulado

Para 100, 120, 90, 110 y 130, cummax() da 100, 120, 120, 120 y 130. Calcula la caída relativa desde el máximo acumulado con s / s.cummax() - 1. En 90 la referencia es el máximo anterior de 120, así que la caída es −0,25, o un 25 % por debajo del máximo. Comparar 90 con el primer valor de 100 respondería a otra pregunta. Un nuevo máximo tiene una caída relativa de cero.

Da más peso a los valores recientes

Una media móvil ponderada exponencialmente, o EWMA, reduce el peso de los valores más antiguos por un factor constante. El factor de suavizado sigue α=2/(span+1), así que span=3 da 0,5. Para adjust=False, la actualización es:

yt=αxt+(1−α)yt−1

Aquí, xt es la nueva observación, yt−1 es el valor suavizado anterior y yt es el resultado actualizado. El primer valor suavizado es igual a la primera observación. Después, cada valor nuevo recibe un peso de 0,5 y el valor suavizado anterior recibe un peso de 0,5:

s.ewm(span=3, adjust=False).mean()

Para 4, 8, 6, 10 y 12, los resultados son 4, 6, 6, 8 y 10. La última actualización promedia la nueva observación 12 y el valor suavizado anterior 8. No promedia solo las dos observaciones en bruto más recientes.

Interpreta el ajuste

La opción predeterminada adjust=True normaliza mediante la suma de los pesos disponibles. Para los mismos datos, los primeros resultados son 4, aproximadamente 6,667, 6,286, 8,267 y 10,194. Es un cálculo inicial distinto del de la forma recursiva; la diferencia disminuye a medida que hay más historial disponible.

Elige un argumento de decaimiento: span, alpha, com o halflife. Una EWMA no tiene un corte abrupto en el que una fila antigua desaparezca de repente. Una media móvil tiene ese corte, mientras que una media expansiva conserva todos los valores anteriores con el mismo peso. Elige según la influencia que deban tener los cambios recientes.

Puntos clave

  • Las ventanas expansivas usan todo el historial hasta cada fila.
  • Agrupa los cálculos acumulados cuando los historiales deban reiniciarse.
  • La caída relativa compara un valor con su máximo acumulado.
  • Los pesos de una EWMA disminuyen gradualmente con la antigüedad.
  • adjust=False utiliza el valor suavizado anterior en su actualización recursiva.
  • El ajuste predeterminado cambia las primeras medias ponderadas.
6

Gestiona zonas horarias y el horario de verano

Una lectura del reloj local solo identifica un momento cuando se conoce su zona horaria. Asigna la zona de registro, convierte momentos reales entre zonas y mantén los cálculos alineados en UTC. Los informes locales necesitan entonces los límites correctos del calendario, incluidas las horas que los cambios de horario de verano omiten o repiten. Separar la asignación de zona horaria de la conversión permite combinar registros de varios lugares sin cambiar su significado inadvertidamente.

6.1 Asigna zonas horarias a las marcas de tiempo y conviértelas entre zonas

Una lectura del reloj necesita una ubicación para identificar un momento. «2025-07-01 09:00» es una marca de tiempo sin zona horaria. Añadir «Europe/Amsterdam» la convierte en una marca con zona horaria: en julio tiene un desfase de +02:00 y representa las 07:00 UTC. UTC es la referencia horaria compartida y no tiene cambios de reloj por horario de verano.

Asigna la zona de registro
local = pd.Timestamp("2025-07-01 09:00")
aware = local.tz_localize("Europe/Amsterdam")

tz_localize() conserva las 09:00 y les asigna el significado de su zona. Utiliza la ubicación donde se registró la lectura del reloj. Llamar UTC a esa misma lectura describiría un momento distinto, dos horas después en este ejemplo.

Utiliza nombres de IANA como «Europe/Amsterdam», «America/New_York» y «Asia/Kolkata». Las zonas regionales con nombre conservan el historial de desfases y las reglas de horario de verano. Un desfase fijo de +01:00 no lo hace. Los nombres cortos son inconsistentes: «EST» es fijo en −05:00, mientras que «CET» sigue los cambios estacionales. pandas 3 utiliza la representación zoneinfo de Python.

Convierte un momento ya identificado

aware.tz_convert("UTC") da 07:00 UTC. Convertir ese mismo instante a Nueva York da las 03:00, a Calcuta las 12:30, a Tokio las 16:00 y a Sídney las 17:00 el 1 de julio. La hora del reloj cambia, pero el momento real sigue siendo el mismo.

OperaciónEntrada requeridaQué permanece fijo
tz_localize(zone)Hora sin zona horariaLectura del reloj local
tz_convert(zone)Hora con zona horariaMomento real

Convertir un valor sin zona horaria genera un error porque no se conoce la zona de partida. Asignar una zona a un valor que ya la tiene también genera un error; utiliza la conversión para esa operación. En columnas, utiliza .dt.tz_localize() y .dt.tz_convert(). En índices, utiliza los métodos directamente o los métodos del DataFrame que actúan sobre el índice.

Interpreta texto con desfases y combina zonas

Una «Z» al final de un texto ISO significa UTC. Para texto con distintos desfases, interpreta con utc=True:

raw = pd.Series(["2025-03-01 10:00+01:00",
                 "2025-04-01 10:00+02:00"])
common = pd.to_datetime(raw, utc=True)

Estos valores se convierten en 09:00 y 08:00 UTC. Después conviértelos a una zona regional para los informes locales. Interpretar desfases mixtos sin utc=True genera un error en pandas 3.

Dos series con zona horaria se alinean por momentos reales aunque sus etiquetas de zona difieran. Las lecturas de Ámsterdam a las 09:00 y 10:00 y las de Londres a las 08:00 y 09:00 en julio se refieren a instantes coincidentes. Su resultado aritmético usa etiquetas UTC. Las comparaciones de orden entre marcas de tiempo sin y con zona horaria fallan; la igualdad devuelve falso.

Elimina una zona de forma deliberada

tz_convert(None) expresa primero un valor con zona horaria en UTC y después elimina la zona. Las 09:00 de Ámsterdam se convierten en las 07:00 sin zona horaria en julio. tz_localize(None) elimina la zona y conserva las 09:00 sin zona horaria. Son resultados distintos. Mantén los datos de cálculo con zona horaria en UTC y después conviértelos antes de elaborar informes o agrupar por día local.

Puntos clave

  • Asigna a las lecturas de reloj sin zona horaria la zona donde se registraron.
  • Convierte las marcas de tiempo con zona horaria para mostrar el mismo momento en otro lugar.
  • Los nombres regionales de IANA conservan las reglas de horario de verano.
  • Interpreta los desfases mixtos en una representación común en UTC.
  • Eliminar una zona puede conservar la hora UTC o la hora del reloj local.

6.2 Gestiona el horario de verano en series temporales

Los relojes locales pueden omitir o repetir una hora. Esos cambios afectan a la interpretación, las duraciones transcurridas y los totales diarios. Las zonas horarias con nombre permiten a pandas distinguir los momentos reales detrás de las lecturas de los relojes locales.

Reconoce una hora local omitida

Ámsterdam adelantó el reloj de las 02:00 a las 03:00 el 30 de marzo de 2025. La lectura de las 02:30 nunca ocurrió. Asignarle una zona sin un criterio genera un error:

pd.Timestamp("2025-03-30 02:30").tz_localize(
    "Europe/Amsterdam", nonexistent="shift_forward"
)

El resultado es 03:00+02:00, la primera hora válida después del intervalo omitido. nonexistent="NaT" conserva el problema como un valor faltante. "shift_backward" desplaza al último momento válido anterior al intervalo omitido. Desplazar un registro cambia su marca de tiempo, así que conserva la entrada original y documenta el criterio elegido en el análisis.

Distingue dos lecturas repetidas

El 26 de octubre de 2025, Ámsterdam atrasó el reloj de las 03:00 a las 02:00. La lectura local de las 02:30 ocurrió una vez con el desfase +02:00 y otra con +01:00. Están separadas por una hora en UTC.

ambiguous=True selecciona la ocurrencia en horario de verano; ambiguous=False selecciona la de horario estándar. ambiguous="NaT" marca una lectura no resuelta como faltante. Una lista booleana puede elegir para cada fila. ambiguous="infer" puede usar una secuencia ordenada que contenga la hora repetida, como 01:30, 02:00, 02:30, 02:00, 02:30, 03:00. Una sola lectura repetida del reloj no proporciona suficiente información de orden para inferir a cuál de las dos ocurrencias se refiere.

Cuenta las horas del día local

El día de transición de primavera tiene 23 horas y el día de transición de otoño tiene 25. Por tanto, una serie completa de datos por hora remuestreada a días locales tiene recuentos variables. Para informar de la energía media por hora, divide una suma diaria entre el número real de lecturas válidas por hora o calcula su media. Dividir todos los totales entre 24 representa incorrectamente los días de transición.

Un conjunto de datos incompleto también puede crear intervalos cortos. Una serie UTC que comienza el 29 de marzo a las 00:00 comienza en Ámsterdam a las 01:00, así que a su primer día local le falta la medianoche incluso antes del día de transición. Comprueba los límites del informe además de las reglas de la zona.

Distingue la misma hora del reloj de un tiempo transcurrido igual
t = pd.Timestamp("2025-03-29 12:00", tz="Europe/Amsterdam")
t + pd.offsets.Day(1)       # March 30 at 12:00
t + pd.Timedelta(days=1)    # March 30 at 13:00

El desplazamiento de calendario conserva el mediodía y solo atraviesa 23 horas transcurridas. El Timedelta añade 24 horas. En otoño, un día natural local puede contener, en cambio, 25 horas transcurridas.

Elige la zona del informe antes de agrupar

El remuestreo sigue la zona del índice. Para calcular el consumo total según la fecha local de Ámsterdam, convierte primero un índice UTC con zona horaria a «Europe/Amsterdam» y después remuestrea a «D». Remuestrear primero en UTC crea límites diarios distintos que no se pueden corregir simplemente cambiando las etiquetas del resultado.

Las fechas de transición difieren según la región: Nueva York cambió el 9 de marzo y el 2 de noviembre de 2025; Sídney terminó el horario de verano el 6 de abril y lo comenzó el 5 de octubre. Tokio y Calcuta no tienen cambios de horario de verano. Conserva los momentos en bruto en UTC y utiliza la zona local con nombre para los informes de calendario.

Puntos clave

  • Las horas omitidas y repetidas necesitan criterios explícitos de asignación de zona horaria.
  • Una hora local ambigua puede referirse a dos momentos UTC distintos.
  • Los días locales completos pueden contener 23 o 25 horas.
  • Convierte a la zona del informe antes de agrupar por día local.
  • Distingue los cambios de reloj de la cobertura incompleta de datos.

Ejemplos de Fechas y series temporales con pandas

6 Lecciones Interactivas

1

Convierte un registro de texto en fechas utilizables

11 pasos
Interpreta un registro pequeño, inspecciona los fallos y calcula duraciones sin perder las unidades de tiempo.
  1. 1
    IntroducciónEmpieza con una columna de fechas

    Un registro de un medidor llega con fechas escritas como texto. Necesitas fechas que pandas pueda comparar, el tiempo transcurrido entre registros y etiquetas legibles para un informe. Eso significa un Timestamp para cada momento, un Timedelta para el tiempo transcurrido y texto con formato solo al final.

    Examina la conversión antes de calcular. Una cadena puede parecer una fecha y seguir sin comportarse como tal, y un formato ambiguo puede producir una fecha verosímil con un significado incorrecto.

  2. 2
    EjemploInterpreta la convención de origen

    El registro documenta fechas con el día primero y un reloj de 24 horas. Una entrada es «14/03/2025 18:45». Su formato es:

    format="%d/%m/%Y %H:%M"
    

    Lee los códigos en orden: día, mes, año, hora y minuto. %m y %M se diferencian por el uso de mayúsculas porque representan campos distintos. La fecha es el 14 de marzo; la hora es 18:45.

  3. 3
    ExplicaciónAplica un formato conocido

    Convierte la columna con el formato documentado:

    parsed = pd.to_datetime(raw,
        format="%d/%m/%Y %H:%M", errors="coerce")
    

    El formato se aplica a cada entrada presente. La coerción convierte las entradas no válidas en NaT. Sin un formato conocido, pandas lo infiere a partir de la primera fila con un valor presente; eso hace que un origen con fechas ambiguas con barras pueda interpretarse incorrectamente.

  4. 4
    DesafíoCuenta los fallos reales

    Una columna contiene «14/03/2025 18:45», «bad» y None. Después de la coerción, dos resultados son NaT. ¿Cuántos valores presentes no se pudieron interpretar y qué máscara los encuentra?

    ---reveal---

    Un valor presente falló: «bad». Utiliza parsed.isna() & raw.notna(). El None original ya era un valor faltante, así que contar todos los NaT exageraría los fallos de conversión.

  5. 5
    ExplicaciónIdentifica momentos y duraciones

    Un Timestamp representa un momento y una columna de fechas y horas contiene muchos momentos. Un Timedelta representa tiempo transcurrido.

    Resta un Timestamp de inicio de un Timestamp de final para obtener una duración. Suma un Timedelta para desplazar un momento una cantidad fija. NaT marca las fechas y horas faltantes, así que las operaciones aritméticas que incluyen un inicio o un final faltante también producen una duración faltante.

  6. 6
    EjemploResta los dos momentos

    Toma estas marcas de tiempo:

    start = pd.Timestamp("2025-03-10 18:00")
    end = pd.Timestamp("2025-03-14 09:30")
    elapsed = end - start
    

    El resultado es 3 días y 15:30. Cuenta primero los tres días completos y después las 15 horas y 30 minutos restantes. Mantenerlo como Timedelta permite que el siguiente paso elija la unidad de informe deseada sin descartar ese resto.

  7. 7
    EjemploConvierte la duración completa en horas

    Tres días aportan 72 horas. El resto aporta 15,5 horas, así que el total es 87,5 horas.

    hours = elapsed / pd.Timedelta(hours=1)
    

    elapsed.days da solo 3. Describe el componente de días completos, así que multiplicar ese componente por 24 haría perder 15,5 horas. total_seconds() da 315 000 y también incluye la duración completa.

  8. 8
    DesafíoElige un componente útil del calendario

    Un informe necesita la media de kWh por día de la semana a lo largo de muchas semanas. ¿Qué componente del calendario puede proporcionar la clave de agrupación y necesita una columna .dt?

    ---reveal---

    Utiliza df["timestamp"].dt.day_name() como clave de agrupación y después calcula la media de kwh. Una columna de fechas y horas necesita .dt; un DatetimeIndex ofrece day_name() directamente. Esto agrupa los días recurrentes de la semana, no fechas de calendario separadas.

  9. 9
    ConsejoComprueba las unidades antes de exportar enteros

    Un tipo de datos de fecha y hora como datetime64[us] almacena recuentos en microsegundos. Una conversión directa a enteros devuelve esos recuentos, incluso si el código antiguo espera nanosegundos.

    Para una columna, solicita explícitamente s.dt.as_unit("ns").astype("int64") cuando se necesiten recuentos en nanosegundos. Para comparar duraciones, conserva las operaciones con Timedelta para que la unidad acompañe al valor.

  10. 10
    DesafíoPrepara el informe final

    Has interpretado fechas y calculado horas transcurridas. El informe necesita fechas como «14 Mar 2025». ¿Debes dar formato a la columna de fechas antes de calcular y qué expresión produce la etiqueta?

    ---reveal---

    Termina primero los cálculos con fechas y horas y después utiliza parsed.dt.strftime("%d %b %Y") para las etiquetas de presentación. Dar formato devuelve texto. El nombre abreviado del mes sigue la configuración regional del sistema; este ejemplo usa inglés.

  11. 11
    RepasoElige la representación según el propósito

    Utiliza valores de fecha y hora para la selección por calendario y las operaciones aritméticas, Timedelta para las duraciones transcurridas y cadenas con formato para las etiquetas finales. La interpretación es el punto en que las convenciones de origen adquieren significado de calendario.

    Antes de pasar una columna convertida al siguiente paso, inspecciona las entradas presentes que fallaron, su tipo de datos y las unidades de salida necesarias. Esto proporciona al análisis posterior una representación temporal clara con la que trabajar.

2

Construye un historial limpio y compara las fechas adecuadas

13 pasos
Comprueba un índice de eventos, selecciona intervalos para informes y distingue los desplazamientos de filas de las comparaciones de calendario.

Guarda esta unidad para seguir cada Lección Interactiva paso a paso.

  1. 1
    IntroducciónDa a cada fila una identidad temporal clara
  2. 2
    EjemploInterpreta, indexa y ordena
  3. 3
    ConsejoTrata los eventos repetidos según su significado
  4. 4
    DesafíoRevela una fecha ausente
  5. 5
    ExplicaciónInterpreta la precisión de un selector
  6. 6
    DesafíoSelecciona una franja de trabajo recurrente
  7. 7
    EjemploSitúa el predecesor junto a cada valor
  8. 8
    Idea claveUna fracción de crecimiento no es una etiqueta porcentual
  9. 9
    ExplicaciónDesplaza fechas para una comparación de calendario
  10. 10
    DesafíoSigue la alineación de etiquetas
  11. 11
    ConexiónMantén separado el predecesor de cada tienda
  12. 12
    DesafíoCorrige un informe de crecimiento diario
  13. 13
    RepasoComprueba las etiquetas antes de interpretar la variación
3

Crea calendarios y etiqueta intervalos completos

12 pasos
Genera secuencias, desplaza fechas de calendario e interpreta etiquetas de períodos, incluidos los trimestres fiscales.

Guarda esta unidad para seguir cada Lección Interactiva paso a paso.

  1. 1
    IntroducciónDecide qué debe representar una fecha
  2. 2
    EjemploGenera fechas de fin de mes
  3. 3
    ConsejoAsocia el alias al calendario
  4. 4
    DesafíoCuenta los extremos de una secuencia
  5. 5
    EjemploDesplaza un mes desde el 31 de enero
  6. 6
    ExplicaciónComprende un punto de anclaje ya alcanzado
  7. 7
    DesafíoElige tiempo hábil o tiempo transcurrido
  8. 8
    ExplicaciónEtiqueta los totales mensuales como intervalos
  9. 9
    EjemploConvierte una fecha en un mes y viceversa
  10. 10
    DesafíoInterpreta una etiqueta fiscal
  11. 11
    DesafíoElige entre momentos mensuales e intervalos mensuales
  12. 12
    RepasoDeja que la regla de calendario transmita el significado
4

Crea informes diarios y mensuales a partir de observaciones

13 pasos
Elige agregaciones, sigue los límites de los intervalos, rellena una cuadrícula más fina y mantén agrupadas las series por separado.

Guarda esta unidad para seguir cada Lección Interactiva paso a paso.

  1. 1
    IntroducciónPregúntate qué debe significar la nueva frecuencia
  2. 2
    EjemploAgrega dos cantidades de forma distinta
  3. 3
    ExplicaciónSigue un intervalo de cinco minutos
  4. 4
    DesafíoCambia de intervalo la observación del límite
  5. 5
    ConsejoRevisa los intervalos vacíos e incompletos
  6. 6
    EjemploCrea una cuadrícula diaria más fina
  7. 7
    EjemploRellena una ausencia de tres maneras
  8. 8
    DesafíoConserva lo que se conocía
  9. 9
    Idea claveUn punto muestreado no es un total
  10. 10
    EjemploMantén cada tienda en sus propios intervalos
  11. 11
    DesafíoExplica un mes vacío de una tienda
  12. 12
    DesafíoCorrige una tabla de comparación
  13. 13
    RepasoInterpreta lo que indica cada fila de salida
5

Sigue las observaciones dentro de cada ventana

16 pasos
Compara ventanas de filas, ventanas de tiempo transcurrido, historial acumulado y ponderación exponencial.

Guarda esta unidad para seguir cada Lección Interactiva paso a paso.

  1. 1
    IntroducciónElige cuánto historial importa
  2. 2
    EjemploConstruye la primera ventana completa de filas
  3. 3
    EjemploAvanza una fila
  4. 4
    DesafíoCuenta los valores válidos dentro de las posiciones
  5. 5
    ConsejoSitúa los resultados en el tiempo con precisión
  6. 6
    ExplicaciónUtiliza tiempo transcurrido para eventos irregulares
  7. 7
    EjemploSigue el límite izquierdo excluido
  8. 8
    DesafíoCambia el límite y el número de observaciones requeridas
  9. 9
    Idea claveUn mes no es una duración de ventana móvil
  10. 10
    EjemploConserva todo el historial
  11. 11
    EjemploCompara un valor con su máximo anterior
  12. 12
    EjemploActualiza una media ponderada recursiva
  13. 13
    ExplicaciónInterpreta el ajuste
  14. 14
    DesafíoDistingue la ponderación de un par reciente
  15. 15
    DesafíoSelecciona el historial que utiliza un informe
  16. 16
    RepasoIdentifica la ventana antes de interpretar el resultado
6

Relaciona momentos entre zonas y cambios de reloj

12 pasos
Asigna zonas horarias y convierte marcas de tiempo, resuelve las horas omitidas o repetidas y forma intervalos correctos de días locales.

Guarda esta unidad para seguir cada Lección Interactiva paso a paso.

  1. 1
    IntroducciónDistingue la hora del reloj del momento
  2. 2
    ExplicaciónAsigna una zona a una lectura sin zona horaria
  3. 3
    EjemploConvierte un evento a varios relojes
  4. 4
    ConsejoConserva las reglas regionales
  5. 5
    DesafíoElige cómo eliminar una zona
  6. 6
    ExplicaciónGestiona una lectura omitida en primavera
  7. 7
    ExplicaciónSepara dos ocurrencias de otoño
  8. 8
    DesafíoResuelve la lectura repetida del reloj
  9. 9
    EjemploCuenta un día local completo
  10. 10
    EjemploDistingue el mediodía de mañana de 24 horas
  11. 11
    DesafíoCorrige el informe diario local
  12. 12
    RepasoMantén claros el instante y el límite del informe

Ejercicios de Fechas y series temporales con pandas

50 Preguntas de Práctica en 5 sets

Set 1: Interpreta, selecciona y resume fechas10 Preguntas de Práctica

Pregunta 1 de 10

Una tarea comienza en «2025-08-12 22:15» y termina en «2025-08-14 04:45». ¿Cuántas horas transcurridas da la resta de las marcas de tiempo?
  1. 24,0 horas
  2. 6,5 horas
  3. 30,5 horas
  4. 54,5 horas
Mostrar respuestaOcultar respuesta
Respuesta: C
La duración es un día completo más 6 horas y 30 minutos, un total de 30,5 horas. Leer solo el componente .days del Timedelta conservaría 24 horas y perdería las 6,5 horas restantes. Divide la duración entre pd.Timedelta(hours=1) para incluirla completa.

Pregunta 2 de 10

Un origen define «07/11/2025 16:20» como el 7 de noviembre a las 16:20. ¿Qué formato explícito interpreta esa convención?
  1. "%m/%d/%Y %H:%M"
  2. "%d/%m/%Y %H:%M"
  3. "%d/%m/%Y %I:%M"
  4. "%Y/%m/%d %H:%M"
Mostrar respuestaOcultar respuesta
Respuesta: B
El origen sitúa el día antes del mes, así que %d/%m/%Y conserva el 7 de noviembre. %H:%M lee la hora en formato de 24 horas y los minutos. Interpretar primero el mes produciría el 11 de julio, una fecha válida con el significado incorrecto; por eso una conversión correcta por sí sola no basta.

Pregunta 3 de 10

Un índice contiene el 3, el 1 y el 2 de mayo de 2025, una vez cada fecha. Las fechas ya están interpretadas. ¿Qué lo prepara para seleccionar intervalos de fechas de forma fiable?
  1. Ordenar el índice cronológicamente.
  2. Eliminar etiquetas repetidas antes de seleccionar.
  3. Sustituir el índice por números de mes.
  4. Rellenar hacia adelante las observaciones numéricas.
Mostrar respuestaOcultar respuesta
Respuesta: A
Las etiquetas son valores de fecha y hora y son únicas, pero llegan desordenadas. sort_index() establece el orden cronológico necesario para seleccionar por tiempo de forma fiable. Eliminar duplicados no resolvería el problema porque el índice indicado no contiene marcas de tiempo repetidas.

Pregunta 4 de 10

Un índice ordenado tiene una fila por hora durante todo el 8 de julio de 2025. ¿Cuántas filas selecciona .loc["2025-07-08 09:00":"2025-07-08 12:00"]?
  1. 3 filas
  2. 12 filas
  3. 24 filas
  4. 4 filas
Mostrar respuestaOcultar respuesta
Respuesta: D
El segmento por etiquetas incluye las 09:00, 10:00, 11:00 y 12:00, un total de cuatro filas. Tratar el final como una posición final de .iloc omitiría las 12:00 y daría tres. Los segmentos por etiquetas de fecha y hora incluyen ambos extremos cuando existen filas coincidentes.

Pregunta 5 de 10

¿Cuál es la primera marca de tiempo de pd.date_range("2025-08-19", periods=3, freq="MS")?
  1. 1 de agosto de 2025
  2. 1 de septiembre de 2025
  3. 19 de agosto de 2025
  4. 31 de agosto de 2025
Mostrar respuestaOcultar respuesta
Respuesta: B
La regla MS requiere inicios de mes, así que la primera fecha coincidente igual o posterior al 19 de agosto es el 1 de septiembre. El 1 de agosto ya es anterior al inicio proporcionado. La secuencia no incluye el 19 de agosto solo porque esa fecha se haya pasado como límite de inicio.

Pregunta 6 de 10

Un recordatorio tiene fecha del 30 de enero de 2025 y debe desplazarse un mes natural después. ¿Qué fecha produce pd.DateOffset(months=1)?
  1. 1 de marzo de 2025
  2. 2 de marzo de 2025
  3. 28 de febrero de 2025
  4. 27 de febrero de 2025
Mostrar respuestaOcultar respuesta
Respuesta: C
Al desplazarse a febrero se conserva el día 30 solo si existe. Febrero de 2025 termina el día 28, así que el desplazamiento se ajusta al 28 de febrero. Sumar 30 días transcurridos llegaría al 1 de marzo, pero una duración fija es una instrucción distinta de un mes natural.

Pregunta 7 de 10

Un sensor registra temperaturas de 18, 24 y 21 °C durante un día. El informe pide la media de las temperaturas registradas. ¿Qué resultado diario debe dar el remuestreo?
  1. 21 °C
  2. 63 °C
  3. 24 °C
  4. 18 °C
Mostrar respuestaOcultar respuesta
Respuesta: A
La media es la suma de las tres observaciones dividida entre tres, lo que da 21 °C. Sumar hasta 63 trata un nivel de temperatura como una cantidad aditiva y no responde a la pregunta planteada. Un máximo de 24 informaría del valor máximo en lugar de la media.

Pregunta 8 de 10

El ajuste de un dispositivo es 12 el 1 de septiembre y cambia a 18 el 4 de septiembre. Se mantiene entre los cambios registrados. ¿Qué valores diarios debe mostrar una cuadrícula rellenada del 1 al 4 de septiembre?
  1. 12, 14, 16, 18
  2. 12, 18, 18, 18
  3. 12, 0, 0, 18
  4. 12, 12, 12, 18
Mostrar respuestaOcultar respuesta
Respuesta: D
El relleno hacia adelante traslada el último ajuste conocido hasta el siguiente cambio y produce 12 el 2 y el 3 de septiembre. La interpolación lineal crearía ajustes intermedios de 14 y 16, pero el dispositivo descrito no cambia gradualmente entre registros. El significado de la cantidad determina el método de relleno.

Pregunta 9 de 10

Para s = pd.Series([3, 9, 6, 12]), ¿cuál es el último valor de s.rolling(3).mean()?
  1. 6,0
  2. 9,0
  3. 7,5
  4. 12,0
Mostrar respuestaOcultar respuesta
Respuesta: B
La última ventana de tres filas contiene 9, 6 y 12, cuya media es 9. El valor 7,5 promedia todo el historial de cuatro filas, lo que correspondería a una media expansiva. Una ventana móvil descarta 3 cuando la cuarta observación entra en la ventana.

Pregunta 10 de 10

Una lectura de reloj sin zona horaria es «2025-07-15 10:00» y se registró en Ámsterdam. Un registro UTC tiene eventos a las 08:00 y a las 10:00. ¿Qué evento coincide con la lectura y cómo debe prepararse esta?
  1. Asignar Ámsterdam, convertir a UTC; coincide con las 08:00.
  2. Asignar UTC, convertir a Ámsterdam; coincide con las 10:00.
  3. Asignar Ámsterdam, eliminar la zona; coincide con las 10:00.
  4. Asignar UTC, eliminar la zona; coincide con las 08:00.
Mostrar respuestaOcultar respuesta
Respuesta: A
Ámsterdam está dos horas por delante de UTC en julio, así que sus 10:00 identifican las 08:00 UTC. Primero se asigna la zona del lugar de registro; después, la conversión conserva ese momento real en UTC. Asignar UTC a la lectura original del reloj identificaría otro evento dos horas más tarde.
Set 2: Compara historiales y resultados de ventanas10 Preguntas de Práctica

Guarda esta unidad para ver todas las respuestas y practicar cada set.

Pregunta 1 de 10

¿Qué devuelve .dt.day_of_week para una observación en domingo?
  1. 0
  2. 1
  3. 7
  4. 6
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 2 de 10

Las visitas son 320 el lunes, 400 el martes y 360 el miércoles. ¿Qué indica pct_change() para el miércoles?
  1. −0,10
  2. −0,125
  3. −40,0
  4. 0,90
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 3 de 10

Una organización utiliza trimestres fiscales con freq="Q-SEP". ¿Qué intervalo describe pd.Period("2026Q1", freq="Q-SEP")?
  1. Enero–marzo de 2026
  2. Julio–septiembre de 2026
  3. Octubre–diciembre de 2025
  4. Octubre–diciembre de 2026
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 4 de 10

Una serie de eventos tiene 5 a las 10:00, 8 a las 10:05 y 2 a las 10:09. ¿Cuál es el valor etiquetado 10:05 de resample("5min", closed="right", label="right").sum()?
  1. 13
  2. 8
  3. 10
  4. 15
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 5 de 10

El sensor A registra 6 en enero y 9 en marzo; el sensor B registra 4 en febrero. Una tabla debe mostrar todos los sensores de enero a marzo y conservar como faltantes los meses sin observaciones. ¿Qué procedimiento es adecuado?
  1. Remuestrear todos los sensores por mes y copiar los totales en cada columna de sensor.
  2. Agrupar solo por número de mes y rellenar hacia adelante las etiquetas de sensor faltantes.
  3. Agregar por sensor y mes y reindexar a la cuadrícula completa de sensores y meses.
  4. Remuestrear por sensor con sumas predeterminadas y sustituir cada cero por un valor faltante.
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 6 de 10

Para [2, NaN, 8, 14], ¿cuáles son los dos últimos resultados de rolling(3, min_periods=2).mean()?
  1. 5,0 y 11,0
  2. NaN y NaN
  3. 6,0 y 12,0
  4. 5,0 y 8,0
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 7 de 10

Los valores son 7 el 1 de abril, 4 el 3 de abril y 9 el 6 de abril, todos a medianoche. ¿Cuál es el valor del 6 de abril de rolling("3D").sum()?
  1. 13
  2. 9
  3. 20
  4. 11
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 8 de 10

Una serie es 80, 100, 75 y 90. ¿Qué caída relativa desde el máximo acumulado tiene la cuarta fila al utilizar s / s.cummax() - 1?
  1. 0,20
  2. −0,25
  3. 0,125
  4. −0,10
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 9 de 10

Un registrador emite «2025-01-10 09:00+01:00» y «2025-07-10 09:00+02:00». El informe debe conservar los instantes y mostrar la hora de Ámsterdam. ¿Qué secuencia es adecuada para pandas 3?
  1. Interpretar con utc=True y después convertir a Europe/Amsterdam.
  2. Interpretar con utc=True y después asignar la zona Europe/Amsterdam.
  3. Eliminar los desfases y después asignar UTC a ambas lecturas.
  4. Interpretar sin desfases y después convertir a Ámsterdam los resultados sin zona.
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 10 de 10

Un medidor de Ámsterdam registra 2 kWh en cada hora real del 26 de octubre de 2025, con cobertura completa. ¿Qué total diario y consumo medio por hora debe mostrar su informe por día local?
  1. 48 kWh y 2 kWh por hora registrada
  2. 50 kWh y aproximadamente 2,083 kWh por hora registrada
  3. 50 kWh y 2 kWh por hora registrada
  4. 46 kWh y 2 kWh por hora registrada
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Set 3: Elige la operación de calendario adecuada10 Preguntas de Práctica

Guarda esta unidad para ver todas las respuestas y practicar cada set.

Pregunta 1 de 10

Una columna es ["2025-09-02", None, "2025-15-02", "bad"]. Se interpreta con format="%Y-%m-%d", errors="coerce". ¿Cuántos valores presentes del origen no se pudieron convertir?
  1. 1
  2. 2
  3. 3
  4. 4
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 2 de 10

Un índice diario ordenado contiene el 2, 3 y 5 de noviembre de 2025. ¿Qué revela un calendario completo del 1 al 6 de noviembre que no revela uno desde el mínimo hasta el máximo?
  1. La fecha interna faltante del 4 de noviembre.
  2. La fecha repetida del 3 de noviembre.
  3. Los nombres de los días de la semana del 2 y 5 de noviembre.
  4. Las fechas ausentes de los extremos, 1 y 6 de noviembre.
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 3 de 10

Un índice completo con datos por hora abarca del 1 al 3 de diciembre de 2025. ¿Cuántas filas selecciona .loc["2025-12-02":"2025-12-03"]?
  1. 48 filas
  2. 25 filas
  3. 24 filas
  4. 47 filas
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 4 de 10

¿Cuántas marcas de tiempo hay en pd.date_range("2025-06-10", "2025-06-11", freq="6h") con la inclusión predeterminada de extremos?
  1. 4
  2. 6
  3. 5
  4. 24
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 5 de 10

Dos lecturas ocurren el 4 de febrero a las 08:00 y el 21 de febrero a las 17:00 de 2025. Su índice se convierte en períodos mensuales y después se vuelve a convertir con .to_timestamp(). ¿Qué ocurre con las etiquetas y su unicidad?
  1. Ambas conservan sus días originales, así que las etiquetas siguen siendo únicas.
  2. Ambas pasan al 28 de febrero a medianoche, así que las etiquetas se repiten.
  3. Pasan al 1 de febrero y al 1 de marzo, así que las etiquetas siguen siendo únicas.
  4. Ambas pasan al 1 de febrero a medianoche, así que las etiquetas se repiten.
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 6 de 10

Las lecturas del nivel de agua son 20 cm el 10 de mayo y 32 cm el 13 de mayo. Tras crear una cuadrícula diaria y aplicar interpolación lineal, ¿cuál es la estimación del 12 de mayo?
  1. 28 cm
  2. 24 cm
  3. 26 cm
  4. 32 cm
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 7 de 10

Una tienda tiene ventas de 14 en enero y 22 en marzo, sin ninguna fila en febrero. ¿En qué difieren las sumas mensuales predeterminadas entre el remuestreo por tienda y la agrupación por tienda más pd.Grouper?
  1. El remuestreo por tienda omite febrero; la forma con Grouper lo incluye como 0.
  2. El remuestreo por tienda incluye febrero como 0; la forma con Grouper lo omite.
  3. Ambos incluyen febrero como NaN porque no se observó ninguna venta.
  4. Ambos incluyen febrero como 18 mediante interpolación entre las ventas.
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 8 de 10

Los pedidos tienen importes de 8 el 1 de junio a las 12:00, 12 el 2 de junio a las 12:00 y 20 el 4 de junio a las 12:00. ¿Cuáles son la suma y el recuento finales de rolling("3D", min_periods=2) con los límites predeterminados?
  1. 32 y 2
  2. 40 y 3
  3. 20 y 1
  4. NaN y 1
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 9 de 10

Para las lecturas 6, 18 y 10, ¿cuáles son la tercera EWMA recursiva y la tercera media expansiva, usando ewm(span=3, adjust=False)?
  1. 14 y aproximadamente 11,333
  2. 11 y 12
  3. 11 y aproximadamente 11,333
  4. 10 y aproximadamente 11,333
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 10 de 10

Dos registros de Ámsterdam indican el 26 de octubre de 2025 a las 02:15. A uno se le asigna la zona con ambiguous=True y al otro con ambiguous=False. ¿Cuál es su separación después de convertirlos a UTC?
  1. Identifican el mismo momento en UTC.
  2. El primero es 1 hora anterior al segundo.
  3. El primero es 1 hora posterior al segundo.
  4. El primero es 2 horas anterior al segundo.
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Set 4: Diagnostica cálculos de series temporales10 Preguntas de Práctica

Guarda esta unidad para ver todas las respuestas y practicar cada set.

Pregunta 1 de 10

Una columna interpretada tiene el tipo de datos datetime64[us]. Una exportación requiere recuentos enteros en nanosegundos. ¿Qué expresión de columna proporciona esos recuentos?
  1. s.dt.as_unit("ns").astype("int64")
  2. s.astype("int64")
  3. s.dt.as_unit("ms").astype("int64")
  4. s.dt.normalize().astype("int64")
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 2 de 10

Un recuento temporal UTC de un evento se almacena como el valor Unix 1735689600000 en milisegundos. ¿Qué argumentos de interpretación conservan su unidad y zona indicadas?
  1. unit="s", utc=True
  2. unit="us", utc=True
  3. unit="ms", utc=True
  4. unit="ms", utc=False
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 3 de 10

La serie a tiene 30 el 1 de agosto y 50 el 4 de agosto. Calculas a - a.shift(1, freq="D"). ¿Qué valores aparecen el 2 y el 4 de agosto?
  1. −30 y 20
  2. 30 y 50
  3. NaN y 20
  4. NaN y NaN
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 4 de 10

Para una marca de tiempo que ya está en el 30 de abril de 2025, ¿qué producen, respectivamente, sumar MonthEnd(0) y sumar MonthEnd(1)?
  1. 31 de mayo y 31 de mayo
  2. 30 de abril y 31 de mayo
  3. 30 de abril y 30 de abril
  4. 30 de abril y 30 de mayo
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 5 de 10

Un período mensual de mayo de 2025 se convierte con .asfreq("D", how="end") y después con .to_timestamp() usando las opciones predeterminadas. ¿Qué marca de tiempo resulta?
  1. 31 de mayo de 2025 a las 00:00
  2. 1 de mayo de 2025 a las 00:00
  3. 31 de mayo de 2025 a las 23:59:59,999999
  4. 1 de junio de 2025 a las 00:00
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 6 de 10

Una secuencia usa freq="B" desde el viernes 12 de septiembre hasta el lunes 15 de septiembre de 2025. No se proporcionan festivos personalizados. ¿Qué fechas aparecen?
  1. 12, 13, 14 y 15 de septiembre
  2. 13 y 14 de septiembre
  3. Solo el 12 de septiembre
  4. 12 y 15 de septiembre
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 7 de 10

Las observaciones de kWh por hora cubren un día completo, incluida su lectura de medianoche. Un informe diario usa asfreq("D"). ¿Por qué el valor comunicado no es el total diario de energía?
  1. Suma todas las lecturas por hora, pero etiqueta el resultado a medianoche.
  2. Calcula la media diaria y la multiplica por el recuento observado.
  3. Selecciona la lectura de medianoche y omite las demás contribuciones por hora.
  4. Rellena las horas faltantes antes de seleccionar la mayor lectura por hora.
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 8 de 10

Los valores diarios del 1 al 7 de junio son 2, 6, 10, 14, 18, 22 y 26. ¿Cuáles son, respectivamente, los resultados etiquetados con el 4 de junio para rolling(5, center=True).mean() y para la ventana retrospectiva predeterminada rolling(5).mean()?
  1. 10 y 10
  2. 14 y NaN
  3. 14 y 10
  4. 18 y 14
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 9 de 10

Una tabla está ordenada por tienda y fecha. La tienda A tiene ventas de 5, 7; la tienda B tiene ventas de 20, 3. El informe necesita totales acumulados dentro de cada tienda y totales recientes de dos filas dentro de cada tienda. ¿Cuáles son las dos secuencias de salida de B?
  1. Acumulado: 32, 35; reciente: 27, 23.
  2. Acumulado: 20, 23; reciente: 20, 23.
  3. Acumulado: 12, 35; reciente: NaN, 35.
  4. Acumulado: 20, 23; reciente: NaN, 23.
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 10 de 10

Una marca de tiempo con zona horaria es el 20 de julio de 2025 a las 14:00 en Ámsterdam. ¿Qué horas sin zona resultan de tz_convert(None) y tz_localize(None), en ese orden?
  1. 12:00 y 14:00
  2. 14:00 y 12:00
  3. 14:00 y 14:00
  4. 16:00 y 14:00
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Set 5: Combina reglas temporales en análisis completos10 Preguntas de Práctica

Guarda esta unidad para ver todas las respuestas y practicar cada set.

Pregunta 1 de 10

Un origen envía ["2025-12-02", "03/12/2025"] y documenta las fechas con barras con el día primero. ¿Qué interpretación debe conservar la limpieza?
  1. 2 de diciembre y 12 de marzo de 2025
  2. 12 de febrero y 3 de diciembre de 2025
  3. 12 de febrero y 12 de marzo de 2025
  4. 2 de diciembre y 3 de diciembre de 2025
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 2 de 10

Dos transacciones válidas comparten una marca de tiempo exacta y tienen importes de 11 y 17. Un informe necesita un total por marca de tiempo antes de reindexar. ¿Cómo deben tratarse las etiquetas duplicadas?
  1. Conservar la última transacción, lo que da 17.
  2. Agrupar por marca de tiempo y sumar hasta 28.
  3. Promediar ambas transacciones, lo que da 14.
  4. Conservar la primera transacción, lo que da 11.
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 3 de 10

Una tabla UTC ordenada con datos por hora debe informar de la actividad de Tokio desde las 09:00 incluidas hasta las 17:00 excluidas en cada fecha local. ¿Qué orden de operaciones e inclusión de la franja horaria son adecuados?
  1. Convertir a Tokio y después usar between_time(..., inclusive="left").
  2. Filtrar de 09:00 a 17:00 UTC y después convertir las filas seleccionadas a Tokio.
  3. Convertir a Tokio y después usar between_time(..., inclusive="both").
  4. Eliminar la zona UTC, asignar la zona de Tokio e incluir ambos extremos.
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 4 de 10

La tienda A tiene 40 y después 60 unidades vendidas; la tienda B tiene 90 y después 72, en orden cronológico dentro de cada tienda. ¿Cuáles son las fracciones de crecimiento de B con pct_change() agrupado y sin agrupar para toda la columna?
  1. Agrupado: 0,50, −0,20; sin agrupar: NaN, −0,20.
  2. Agrupado: NaN, −0,25; sin agrupar: 1,25, −0,25.
  3. Agrupado: NaN, −0,20; sin agrupar: 0,50, −0,20.
  4. Agrupado: 0,50, −0,25; sin agrupar: NaN, −0,25.
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 5 de 10

Un técnico programa una inspección para las 08:45, hora local de Ámsterdam. Desde el 25 de octubre de 2025 a las 08:45, ¿qué operación avanza hasta la misma hora del reloj del día siguiente en pandas 3?
  1. Sumar pd.Timedelta(hours=24).
  2. Sumar pd.offsets.Day(1).
  3. Sumar pd.Timedelta(hours=23).
  4. Sumar pd.offsets.MonthEnd(0).
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 6 de 10

Una tabla abarca enero de 2024 y enero de 2025 para varias tiendas. El informe necesita un total por tienda y por cada mes natural distinto. ¿Qué claves de agrupación conservan las identidades necesarias?
  1. La tienda y df["date"].dt.month.
  2. Solo pd.Grouper(key="date", freq="ME").
  3. La tienda y pd.Grouper(key="date", freq="ME").
  4. La tienda y df["date"].dt.day_of_week.
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 7 de 10

Un registro irregular de clientes necesita el gasto de los 30 días transcurridos anteriores, incluido el evento actual y excluido el instante exactamente 30 días antes. ¿Qué cálculo es adecuado después de ordenar dentro de cada cliente?
  1. df.groupby("customer").rolling("30D", on="date")["amount"].sum()
  2. df.groupby("customer")["amount"].rolling(30).sum()
  3. df.groupby("customer").rolling("30D", on="date", closed="both")["amount"].sum()
  4. df.rolling("30D", on="date")["amount"].sum()
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 8 de 10

Una serie UTC por hora cubre completamente el día local del 30 de marzo de 2025 en Ámsterdam. ¿Cuáles son el inicio UTC, el final UTC excluido y el número de horas de ese día local?
  1. 30 de marzo a las 00:00; 31 de marzo a las 00:00; 24 horas.
  2. 29 de marzo a las 22:00; 30 de marzo a las 23:00; 25 horas.
  3. 29 de marzo a las 23:00; 30 de marzo a las 23:00; 24 horas.
  4. 29 de marzo a las 23:00; 30 de marzo a las 22:00; 23 horas.
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 9 de 10

Una serie diaria de energía tiene lecturas de 4 el 2 de octubre y 7 el 4 de octubre de 2025. Los registros faltantes indican un consumo desconocido. ¿Qué debe contener el 3 de octubre después de resample("D").sum(min_count=1)?
  1. 0 kWh
  2. 5,5 kWh
  3. NaN
  4. 4 kWh
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 10 de 10

Las observaciones de precipitación cubren todos los días desde el 1 de julio hasta el 10 de agosto de 2025. Las sumas mensuales son 93 mm y 50 mm. ¿Cuáles son las medias por día observado y qué se puede concluir sobre el total de agosto completo?
  1. Julio: 3 mm; agosto: 5 mm; el total de agosto completo debe ser mayor.
  2. Julio: 3 mm; agosto: 5 mm; el total de agosto completo sigue siendo desconocido.
  3. Julio: 3 mm; agosto: aproximadamente 1,61 mm; el total de agosto completo es menor.
  4. Julio: 93 mm; agosto: 50 mm; el total de agosto completo sigue siendo desconocido.
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

¿Te atascas con una pregunta tuya? Ayuda con Tareas

Términos Clave

85 Términos Clave, cada uno con su definición

A

Accesor .dt
El accesor .dt ofrece funciones de fecha, hora y duración en una columna de pandas, incluidos campos de calendario, redondeo y conversión de unidades.
El accesor .dt en readings["time"].dt.hour proporciona la hora registrada para agrupar.
Adelanto
Un adelanto es un valor posterior situado junto a una observación anterior, que hace disponible el valor siguiente en la etiqueta de la fila actual.
Un adelanto mediante shift(-1) permite a una tabla comparar cada evento con el siguiente evento registrado.
Agrupador temporal (Grouper)
Un agrupador temporal es un objeto de agrupación de pandas que proporciona reglas de intervalos temporales dentro de groupby, junto con otras claves como tienda o sensor.
Una clave de tienda más un agrupador temporal mensual conserva un historial mensual separado para cada tienda.
Ajuste a la fecha válida anterior (rollback)
El método rollback() de un desplazamiento encuentra el punto de anclaje válido más cercano igual o anterior a una fecha y conserva una fecha que ya está en ese punto.
rollback() de una regla MonthEnd mueve el 15 de enero al 31 de diciembre del año anterior.
Ajuste a la siguiente fecha válida (rollforward)
El método rollforward() de un desplazamiento encuentra el punto de anclaje válido más cercano igual o posterior a una fecha y conserva una fecha que ya está en ese punto.
rollforward() de una regla MonthEnd mueve el 15 de enero al 31 de enero del mismo año.
Alias de frecuencia
Un alias de frecuencia es una cadena compacta que nombra una regla de repetición para operaciones con fechas y horas, como intervalos por hora o puntos de anclaje de fin de mes.
El alias de frecuencia "15min" genera etiquetas de cuartos de hora, mientras que "ME" genera fines de mes.
Alineación por marcas de tiempo
La alineación por marcas de tiempo hace coincidir observaciones por sus etiquetas de fecha y hora durante operaciones aritméticas entre Series, en lugar de hacerlas coincidir por posición de fila.
La alineación por marcas de tiempo deja un resultado faltante en una fecha sin correspondencia cuando se suman dos historiales de tiendas.
Apertura, máximo, mínimo y cierre (OHLC)
OHLC es una agregación que devuelve la primera, la mayor, la menor y la última observación de cada intervalo temporal, denominadas apertura, máximo, mínimo y cierre.
El OHLC diario distingue la última lectura de un sensor de la lectura más alta alcanzada ese día.
Asignación de zona horaria
La asignación de zona horaria aplica una zona de registro a lecturas de reloj sin zona horaria y conserva las horas y minutos locales mostrados.
La asignación de zona horaria da significado de Tokio a una lectura de 09:00 sin zona antes de convertirla a UTC.
Aumento de la frecuencia temporal (upsampling)
El aumento de la frecuencia temporal desplaza observaciones a una cuadrícula temporal más fina e introduce posiciones vacías donde no existe una observación original en las nuevas marcas de tiempo.
Aumentar la frecuencia de lecturas cada tres días a etiquetas diarias crea fechas interiores sin observaciones.

C

Caída relativa desde el máximo acumulado (drawdown)
Una caída relativa desde el máximo acumulado es la disminución fraccionaria de un valor respecto a su máximo acumulado, calculada como el valor actual dividido entre ese máximo, menos uno.
Un valor de 90 después de un máximo de 120 tiene una caída relativa de −0,25, lo que significa que está un 25 % por debajo de ese máximo.
Cierre del intervalo
El cierre del intervalo especifica qué límite de un intervalo de remuestreo pertenece a ese intervalo y determina dónde se cuentan las observaciones situadas exactamente en los extremos.
El cierre por la derecha asigna una lectura de exactamente las 10:05 al intervalo que termina a esa hora.
Coerción de tipos
La coerción de fechas sustituye las entradas que no se pueden interpretar por NaT, lo que permite terminar la conversión mientras los valores no válidos quedan marcados como faltantes.
Después de la coerción, compara los resultados faltantes con las entradas de origen presentes para localizar las fechas que fallaron.
Conversión de fechas y horas a texto (strftime)
El método strftime convierte valores de fecha y hora en texto para mostrar mediante códigos de formato, cambiando su representación de fechas y horas a cadenas.
Un informe puede usar strftime para mostrar «17 Aug 2025» después de completar sus cálculos con fechas y horas.
Conversión de frecuencia de períodos
La conversión de frecuencia de períodos transforma un período a otra frecuencia y usa un límite inicial o final elegido cuando selecciona un intervalo más fino.
La conversión de frecuencia de períodos con how="end" puede seleccionar el último período diario de un mes.
Conversión de frecuencia sin agregación (asfreq)
La conversión de frecuencia con asfreq() sitúa una serie en una nueva cuadrícula mediante la selección de marcas de tiempo coincidentes, sin agregar las observaciones intermedias.
asfreq() diario en datos por hora conserva las lecturas de medianoche sin sumar los valores del día.
Conversión de zona horaria
La conversión de zona horaria expresa en otra zona un momento que ya tiene zona horaria, conservando el instante real mientras cambia su representación en el reloj local.
La conversión de zona horaria cambia el mediodía de Ámsterdam a la hora UTC correspondiente a esa fecha.
Correlación móvil
La correlación móvil mide la relación entre dos series mediante un conjunto móvil de observaciones emparejadas y revela cambios a lo largo del tiempo.
La correlación móvil puede mostrar que dos sensores evolucionan juntos en un intervalo, pero con menos coincidencia en otro.
Criterio de asignación de zona horaria
Un criterio de asignación de zona horaria especifica cómo se resuelven las lecturas locales omitidas o repetidas, por ejemplo, eligiendo una ocurrencia, marcándolas como faltantes o desplazándolas.
Conservar el texto original del reloj permite a un analista inspeccionar las lecturas modificadas por un criterio de asignación de zona horaria que las desplaza.

D

Desapilamiento
El desapilamiento mueve un nivel del índice a las columnas y crea una tabla más ancha en la que las combinaciones faltantes se representan como celdas faltantes por defecto.
Desapilar el nivel de tienda sitúa el total mensual de cada tienda junto a los demás en columnas.
Desfase respecto a UTC
Un desfase respecto a UTC indica cuánto está adelantado o atrasado un reloj local con respecto a UTC en un momento, pero un desfase fijo por sí solo no proporciona reglas estacionales.
El desfase respecto a UTC de +05:30 sitúa un reloj local cinco horas y treinta minutos por delante de UTC.
Desplazamiento a fin de mes (MonthEnd)
Un desplazamiento a fin de mes mueve una marca de tiempo a un punto de anclaje de fin de mes; su recuento controla si una fecha que ya está en ese punto avanza.
Un desplazamiento a fin de mes con recuento 0 conserva el 30 de abril, mientras que con recuento 1 lo mueve al 31 de mayo.
Desplazamiento de calendario (DateOffset)
Un desplazamiento de calendario mueve una marca de tiempo según campos o reglas del calendario y permite que los meses y años tengan duraciones transcurridas variables.
Un desplazamiento de calendario de un mes ajusta el 31 de enero al último día válido de febrero.
Día natural (día calendario)
Un día natural avanza la fecha local y conserva la hora del reloj, por lo que su duración transcurrida puede cambiar al cruzar transiciones de horario de verano.
Al cruzar un cambio de reloj de primavera, un día natural puede pasar de un mediodía al siguiente en solo 23 horas transcurridas.
Duración (Timedelta)
Una duración es un intervalo fijo que se puede sumar a una marca de tiempo u obtener al restar dos momentos entre sí.
Una duración de 36 horas representa un día más doce horas, no solo un día completo.

E

Etiqueta del intervalo
Una etiqueta de intervalo es la marca de tiempo asignada a un intervalo temporal agregado, que identifica el resultado sin determinar qué observaciones pertenecen a él.
Una etiqueta de intervalo del 30 de junio puede nombrar un trimestre que solo contiene observaciones de abril.
Extremo izquierdo abierto
Un extremo izquierdo abierto excluye las observaciones situadas exactamente al inicio de un intervalo temporal, incluso cuando se incluye el límite derecho actual.
Un extremo izquierdo abierto hace que la ventana móvil predeterminada de tres días del 5 de mayo excluya la medianoche del 2 de mayo.

F

Factor de suavizado
El factor de suavizado alfa controla el peso de la nueva observación en una media ponderada exponencialmente recursiva, mientras que el peso restante corresponde a la media anterior.
Un factor de suavizado de 0,5 da el mismo peso a la nueva lectura y al valor suavizado anterior.
Fecha u hora ausente en el calendario esperado
Una fecha u hora ausente en el calendario esperado es una etiqueta temporal esperada sin una fila correspondiente, que puede encontrarse al comparar las observaciones con un calendario completo.
Un miércoles ausente en el calendario esperado no aparece en un índice diario que solo contiene el martes y el jueves.
Formato de interpretación de fechas y horas
Un formato de interpretación especifica cómo los campos de texto representan componentes de fecha y hora mediante códigos para campos como el año, el mes y el minuto.
El formato de interpretación "%d/%m/%Y" lee «08/11/2025» como el 8 de noviembre en lugar del 11 de agosto.
Franja horaria
Una franja horaria selecciona observaciones según su hora del día a lo largo de varias fechas, con decisiones explícitas sobre la inclusión de cada extremo.
Una franja horaria de 22:00 a 06:00 conserva la actividad de las últimas horas de la noche y las primeras de la mañana en cada fecha.
Frecuencia anclada al calendario
Una frecuencia anclada al calendario selecciona puntos específicos del calendario, comenzando por el primer punto coincidente igual o posterior al límite proporcionado.
Una frecuencia anclada a los inicios de mes comienza el 1 de septiembre cuando su límite de inicio es el 19 de agosto.
Frecuencia de días hábiles
Una frecuencia estándar de días hábiles genera fechas de lunes a viernes y omite los fines de semana, mientras que para los festivos requiere reglas personalizadas explícitas.
Una frecuencia de días hábiles incluye el viernes y el lunes y omite el fin de semana intermedio.
Frecuencia inferida
Una frecuencia inferida es una regla de espaciado regular detectada a partir de marcas de tiempo observadas, aunque el índice no tenga metadatos de frecuencia almacenados.
Una frecuencia inferida puede revelar un patrón mensual en tres marcas de tiempo consecutivas de fin de mes.
Frecuencia por ocurrencia de un día de la semana dentro del mes
Una frecuencia por ocurrencia de un día de la semana dentro del mes selecciona una aparición específica de ese día en cada mes, como el tercer viernes para un evento recurrente.
La frecuencia "WOM-3FRI" crea fechas recurrentes el tercer viernes de cada mes.

H

Hora local ambigua
Una hora local ambigua es una lectura repetida del reloj que puede identificar dos momentos distintos con diferentes desfases durante un cambio que atrasa el reloj.
La hora local ambigua de las 02:30 en Ámsterdam el 26 de octubre de 2025 tiene dos significados distintos en UTC.
Hora local inexistente
Una hora local inexistente es una lectura del reloj omitida por un cambio que adelanta el desfase y requiere un criterio al asignar zona horaria a datos sin zona.
La hora local inexistente de las 02:30 en Ámsterdam el 30 de marzo de 2025 necesita un criterio de asignación de zona horaria.
Horario de verano
El horario de verano cambia estacionalmente los desfases del reloj local y produce una hora omitida cuando los relojes se adelantan y una hora repetida cuando se atrasan.
El horario de verano acorta el día de transición de primavera de Ámsterdam mientras UTC continúa sin saltos.

I

Inclusión de los extremos
La inclusión de los extremos determina si los límites de inicio y fin que coinciden con la regla aparecen en una secuencia de fechas generada, lo que afecta al número de etiquetas.
La inclusión predeterminada de los extremos da 25 etiquetas por hora desde una medianoche hasta la siguiente.
Indexación mediante cadenas parciales de fecha
La indexación mediante cadenas parciales de fecha selecciona todas las marcas de tiempo que coinciden con la precisión de una cadena de fecha, como todas las observaciones de un mes especificado.
La indexación mediante cadenas parciales con "2025-09" conserva las observaciones por hora de todo septiembre.
Interpolación lineal
La interpolación lineal estima valores faltantes a lo largo de una línea recta entre valores conocidos y usa incrementos iguales en una cuadrícula espaciada uniformemente.
La interpolación lineal estima 12 y 14 entre los valores diarios extremos 10 y 16, separados por tres días.
Interpretación de fechas con formatos mixtos
La interpretación de fechas con formatos mixtos interpreta cada cadena de fecha por separado y permite distintas estructuras en una columna después de comprobar sus significados.
La interpretación con formatos mixtos sigue necesitando una convención conocida de día y mes para cada fecha de origen con barras.
Intervalo de agrupación por día local
Un intervalo de agrupación por día local agrupa momentos por fecha en la zona con nombre del índice, por lo que su duración transcurrida puede diferir de la de un día UTC durante los cambios de reloj.
Un intervalo de agrupación por día local debe formarse después de convertir un índice de datos por hora a la zona horaria utilizada para el informe.
Intervalo de agrupación temporal
Un intervalo de agrupación temporal es un intervalo usado para agrupar observaciones durante el remuestreo, con la pertenencia de los límites y una etiqueta de salida definidas por separado.
Un intervalo de agrupación temporal que termina a las 10:05 puede contener lecturas posteriores a las 10:00 hasta las 10:05.
ISO 8601
ISO 8601 es una notación de fecha y hora que sitúa el año antes del mes y el día, lo que hace que las fechas completas sean inequívocas entre convenciones locales.
La fecha ISO 8601 «2025-08-17» tiene el mismo significado tanto donde se escribe primero el día como donde se escribe primero el mes.

Í

Índice de fechas y horas (DatetimeIndex)
Un índice de fechas y horas es un índice de pandas con etiquetas de fila de fecha y hora que permite seleccionar por calendario y sirve de base para cálculos temporales.
Un índice de fechas y horas creado a partir de los momentos de eventos permite que .loc seleccione un mes completo de informe.
Índice de períodos (PeriodIndex)
Un índice de períodos es un índice de pandas cuyas etiquetas son períodos con una frecuencia compartida, adecuado para observaciones que describen intervalos de tiempo repetidos.
Sumar un período mensual a un PeriodIndex adelanta cada etiqueta un mes natural completo.
Índice jerárquico (MultiIndex)
Un índice jerárquico es un índice con varios niveles de etiquetas, como tienda y mes, que permite a un resultado conservar más de una identidad de agrupación.
Un índice jerárquico de ventas puede identificar tanto la tienda A como su total de enero en la misma etiqueta de fila.
Índice monótono no decreciente
Un índice temporal monótono no decreciente mantiene cada marca de tiempo igual o posterior a la anterior, permitiendo etiquetas iguales mientras conserva el orden.
Un índice monótono puede tener dos compras válidas que comparten la misma marca de tiempo.

L

Límite de un período
El límite de un período marca el inicio o el último momento de un intervalo y se elige al convertir una etiqueta de período en una marca de tiempo.
Elegir el límite inicial de un período da la medianoche del comienzo del mes.

M

Marca de tiempo (Timestamp)
Una marca de tiempo es un objeto de pandas que representa un momento, con campos de calendario y una zona horaria opcional para identificar su ubicación.
Restar la marca de tiempo de inicio de un evento de su marca de tiempo de final da su duración transcurrida.
Marca de tiempo con zona horaria
Una marca de tiempo con zona horaria lleva información de zona e identifica un momento real que puede mostrarse en otra zona sin cambiar el instante.
La marca de tiempo con zona horaria de Ámsterdam 09:00+02:00 identifica el mismo evento de julio que las 07:00 UTC.
Marca de tiempo duplicada
Una marca de tiempo duplicada es una etiqueta de fila compartida por más de una observación, que puede representar eventos válidos separados o registros repetidos.
Una marca de tiempo duplicada a las 14:00 puede etiquetar dos compras que deben incluirse en un total de ventas.
Marca de tiempo sin zona horaria
Una marca de tiempo sin zona horaria no tiene una zona asignada y proporciona una lectura del reloj sin identificar dónde se registró esa lectura local.
La marca de tiempo sin zona horaria «2025-07-01 09:00» necesita una ubicación antes de hacerla coincidir con un evento UTC.
Marca de tiempo Unix
Una marca de tiempo Unix cuenta unidades de tiempo desde la medianoche UTC del 1 de enero de 1970, por lo que interpretar su número requiere conocer la unidad.
Una marca de tiempo Unix en milisegundos debe usar unit="ms", aunque un recuento en segundos parezca similar.
Marcador de fecha u hora faltante (NaT)
NaT es el marcador de pandas para fechas, horas y duraciones faltantes, que se detecta con comprobaciones de valores faltantes como pd.isna().
Una fecha no válida sometida a coerción durante la interpretación se convierte en NaT, al igual que las entradas que ya faltaban.
Máscara de calendario
Una máscara de calendario es un filtro booleano construido a partir de componentes de fecha como el día de la semana o el mes, que selecciona las filas que cumplen una condición recurrente del calendario.
Una máscara de calendario que usa los números de día de la semana 5 y 6 conserva las lecturas de fin de semana de todo el conjunto de datos.
Máximo acumulado
Un máximo acumulado es el valor más alto alcanzado desde el inicio hasta la observación actual y permanece sin cambios hasta que llega un valor mayor.
Un máximo acumulado permanece en 120 cuando una serie cae a 90, hasta que llega un valor mayor.
Media móvil ponderada exponencialmente
Una media móvil ponderada exponencialmente suaviza una serie al reducir los pesos de las observaciones más antiguas por un factor constante según su antigüedad.
Una media móvil ponderada exponencialmente con alfa 0,5 actualiza una media anterior de 6 a 8 para un nuevo valor de 10.

N

Nombre de zona horaria de IANA
Un nombre de zona horaria de IANA identifica un conjunto de reglas regionales de zona horaria, normalmente en formato Área/Ciudad, incluidos los cambios históricos y estacionales de desfase.
El nombre de zona horaria de IANA «Europe/Amsterdam» proporciona distintos desfases en invierno y verano.
Normalización
La normalización de fechas y horas establece la parte horaria de un valor a medianoche y conserva su representación de fecha y hora para el análisis.
La normalización de fechas y horas da a los eventos etiquetas de medianoche y mantiene sus valores utilizables como fechas y horas.
Número mínimo de valores válidos (min_periods)
El argumento min_periods establece cuántos valores válidos necesita una ventana antes de producir un resultado, sin contar para ello las celdas faltantes.
Una ventana de tres filas con una celda faltante cumple min_periods=2, pero no min_periods=3.

P

Período (Period)
Un período es un intervalo de tiempo definido por una etiqueta y una frecuencia, como un mes o un trimestre, en lugar de un momento registrado individual.
Un período mensual puede etiquetar un total de ventas de marzo sin seleccionar un día arbitrario dentro de marzo.

R

Recuento de valores presentes en la ventana
El recuento de valores presentes en la ventana indica cuántas observaciones presentes contribuyen dentro de una ventana móvil y muestra los datos que respaldan su estadístico.
El recuento de valores presentes en la ventana revela cuándo una media móvil usa una sola lectura y otra usa diez.
Reducción de la frecuencia temporal (downsampling)
La reducción de la frecuencia temporal pasa de una frecuencia temporal más fina a una más amplia y normalmente combina varias observaciones mediante una agregación elegida.
Reducir la frecuencia temporal de precipitaciones diarias a sumas mensuales conserva los milímetros como unidad del total.
Relleno hacia adelante
El relleno hacia adelante sustituye valores faltantes por el valor conocido anterior más reciente y es adecuado para un estado que permanece vigente hasta que cambia.
El relleno hacia adelante traslada un ajuste de dispositivo a los días posteriores hasta su siguiente cambio registrado.
Relleno hacia atrás
El relleno hacia atrás sustituye valores faltantes por el siguiente valor conocido posterior y lleva información del futuro a posiciones vacías anteriores.
El relleno hacia atrás aplicaría el saldo de mañana a una fecha en la que esa información no estaba disponible.
Remuestreo temporal (resampling)
El remuestreo temporal organiza una serie temporal con una nueva frecuencia y permite resumir observaciones en intervalos más amplios o situarlas en una cuadrícula más fina.
Remuestrear lecturas de energía por hora mediante sumas diarias da un total de energía para cada día.
Remuestreo temporal por grupos
El remuestreo temporal por grupos aplica una operación de frecuencia temporal por separado dentro de la identidad de cada serie y conserva historiales independientes en una tabla larga.
El remuestreo temporal por grupos mantiene separados los intervalos mensuales de un sensor de las lecturas de los sensores vecinos.
Resolución temporal
La resolución temporal de fechas y horas es la unidad usada para los recuentos de tiempo almacenados, como microsegundos o nanosegundos, y determina su precisión y su intervalo.
Convertir a enteros una columna con resolución de microsegundos da recuentos de microsegundos desde la época.
Rezago (retardo)
Un rezago es un valor anterior situado junto a una observación posterior para compararlos, con una distancia definida en filas o en tiempo de calendario.
Un rezago de una fila puede llegar a varios días atrás cuando un sensor tiene intervalos sin lecturas.
Rezago del suavizado
El rezago del suavizado es la respuesta retardada de una media móvil a los cambios de dirección, que generalmente aumenta cuando se conservan más valores antiguos.
El rezago del suavizado hace que una media retrospectiva larga responda lentamente después de un aumento repentino de las lecturas.

S

Secuencia de fechas
Una secuencia de fechas es una sucesión de etiquetas de fecha y hora generada a partir de límites, un recuento y una regla de frecuencia, que a menudo se usa como calendario esperado.
Una secuencia de 24 etiquetas por hora puede definir el índice de destino para un día ordinario completo.
Segmento por etiquetas con ambos extremos incluidos
Un segmento por etiquetas con ambos extremos incluidos conserva las etiquetas coincidentes tanto al inicio como al final, a diferencia de un segmento por posiciones que excluye la posición final.
Un segmento por etiquetas con ambos extremos incluidos desde las 10:00 hasta las 13:00 conserva cuatro filas por hora cuando todas están presentes.
Serie temporal (serie de tiempo)
Una serie temporal es un conjunto de observaciones asociadas a momentos o intervalos de tiempo que permite estudiar los valores en su orden temporal.
Una serie temporal de consumo de energía por hora permite a un analista comparar la demanda a distintas horas del día.
Suma acumulada
Una suma acumulada añade cada nueva observación al total anterior y produce una cantidad acumulada que puede reiniciarse dentro de grupos separados.
Agrupar las ventas por año antes de una suma acumulada inicia una nueva cantidad acumulada anual cada enero.

T

Tiempo universal coordinado (UTC)
UTC es el tiempo universal coordinado, la referencia horaria compartida que se usa para alinear momentos entre zonas sin cambios estacionales de reloj por horario de verano.
Convertir registros regionales de eventos a UTC permite hacer coincidir sus momentos reales de forma coherente.
Trimestre fiscal
Un trimestre fiscal es un intervalo de informe de tres meses dentro de un ejercicio fiscal definido por un mes de cierre que puede ser distinto de diciembre.
Con Q-JUN, el primer trimestre fiscal de 2025 abarca de julio a septiembre de 2024.

V

Variación relativa
Una variación relativa es el valor actual dividido entre su valor de comparación, menos uno, lo que da el crecimiento relativo respecto a ese valor anterior.
Una variación relativa de −0,15 significa que la cantidad actual está un 15 % por debajo de su valor de comparación.
Ventana basada en el tiempo
Una ventana basada en el tiempo selecciona observaciones dentro de una duración fija de tiempo transcurrido con respecto a cada marca de tiempo, por lo que su número de filas puede variar.
Una ventana de tres días basada en el tiempo puede contener un pedido de cliente o varios, según cuándo se produzcan.
Ventana centrada
Una ventana centrada sitúa su salida en el centro de las observaciones que contribuyen, por lo que pueden contribuir valores posteriores a la etiqueta del resultado.
Una ventana centrada etiquetada el martes puede usar observaciones registradas el miércoles y el jueves.
Ventana de duración fija
Una ventana de duración fija tiene una única duración transcurrida, como 24 horas o 30 días, a diferencia de los intervalos de calendario cuya duración depende de sus fechas.
Una ventana de duración fija de 30 días no puede sustituirse por una regla de mes natural de duración variable.
Ventana expansiva
Una ventana expansiva comienza en la primera observación y crece hasta la fila actual, conservando todas las observaciones válidas anteriores con el mismo peso.
Una ventana expansiva da menos influencia a una nueva lectura después de que se haya acumulado un historial largo.
Ventana móvil
Una ventana móvil es una selección desplazable de filas o momentos que se utiliza para calcular repetidamente un estadístico a medida que avanza la serie.
Una ventana móvil de tres filas descarta su fila más antigua cuando una nueva entra en el cálculo.
Ventana retrospectiva
Una ventana retrospectiva termina en la fila actual y usa observaciones iguales o anteriores a su etiqueta, por lo que es adecuada para informes de la información disponible en ese momento.
Una ventana retrospectiva diaria suaviza el consumo reciente de energía sin depender de las lecturas de mañana.

Sobre esta unidad

Por StudeliInformar de un error

Crea tus propios Materiales de Estudio

Convierte tus notas, diapositivas y documentos en Guías de Estudio, Preguntas de Práctica, Flashcards y 6 herramientas más.

Comenzar