Análisis y manejo de fechas

Transformación de datos con Polars

Liam Brannigan

Data Scientist & Polars Contributor

Datos de series temporales

Serie temporal de precios de mercado

Transformación de datos con Polars

Datos de series temporales

Serie temporal de ventas

Transformación de datos con Polars

Datos de series temporales

Serie temporal de reproducciones

Transformación de datos con Polars

Datos de series temporales

Serie temporal de recuento

Transformación de datos con Polars

Conjunto de datos de precios de electricidad

shape: (24, 3)
| time             | price | solar |
| ---              | ---   | ---   |
| str              | f64   | f64   |
|------------------|-------|-------|
| 05/07/2025 00:00 | 34.2  | 0.0   |
| ...              | ...   | ...   |
| 05/07/2025 12:00 | 0.0   | 462.0 |
  • time - valores por hora
  • price - £ por megavatio hora
  • solar - W por metro cuadrado
  • solar > 400 = día de verano cálido
Transformación de datos con Polars

Relación precio-solar

Serie temporal de precios de electricidad

Transformación de datos con Polars

Relación precio-solar

Serie temporal de precios de electricidad

Transformación de datos con Polars

Tipos datetime en Polars

  • Date - fecha de calendario - 2000-01-01
  • Datetime - fecha y hora - 2000-01-01 12:00:00
  • Time - hora del día - 12:00:00
  • Duration - intervalo - 3 hours
Transformación de datos con Polars

Parseo automático de datetime

pl.read_csv(
  "electricity_prices",

)
Transformación de datos con Polars

Parseo automático de datetime

pl.read_csv(
  "electricity_prices",
  try_parse_dates=True
)
  • formato: YYYY-MM-DD
  • p. ej. 2025-07-05
  • p. ej. 2025-07-05 12:00:00
Transformación de datos con Polars

Nuestros datos requieren parseo manual

| time             | price | solar |
| ---              | ---   | ---   |
| str              | f64   | f64   |
|------------------|-------|-------|
| 05/07/2025 00:00 | 34.2  | 0.0   |
| 05/07/2025 01:00 | 28.7  | 0.0   |
  • formato: DD/MM/YYYY HH:MM
  • Polars no lo detecta automáticamente
Transformación de datos con Polars

Parseo con strptime

prices.with_columns(
    pl.col("time").str.strptime(                             )
)
Transformación de datos con Polars

Parseo con strptime

prices.with_columns(
    pl.col("time").str.strptime(pl.Datetime,                 )
)
Transformación de datos con Polars

Parseo con strptime

prices.with_columns(
    pl.col("time").str.strptime(pl.Datetime, "%d/%m/%Y      ")
)
Transformación de datos con Polars

Parseo con strptime

prices.with_columns(
    pl.col("time").str.strptime(pl.Datetime, "%d/%m/%Y %H:%M")
)
Transformación de datos con Polars

Parseo con strptime

prices.with_columns(
    pl.col("time").str.strptime(pl.Datetime, "%d/%m/%Y %H:%M")
)
| time                | price | solar |
| ---                 | ---   | ---   |
| datetime[us]        | f64   | f64   |
|---------------------|-------|-------|
| 2025-07-05 00:00:00 | 34.2  | 0.0   |
| 2025-07-05 01:00:00 | 28.7  | 0.0   |
| 2025-07-05 02:00:00 | 27.5  | 0.0   |
Transformación de datos con Polars

Extraer componentes de datetime

Tabla de serie temporal

Transformación de datos con Polars

Extraer componentes de datetime

Tabla de serie temporal con la fecha resaltada en una fila

Transformación de datos con Polars

Extraer componentes de datetime

Tabla de serie temporal con la hora resaltada en una fila

Transformación de datos con Polars

Extraer componentes de datetime

Tabla de serie temporal con la hora del día resaltada en una fila

Transformación de datos con Polars

Extraer la fecha

prices.with_columns(
    pl.col("time").dt.date()
)
Transformación de datos con Polars

Extraer la fecha

prices.with_columns(
    pl.col("time").dt.date().alias("date")
)
Transformación de datos con Polars

Extraer la fecha

prices.with_columns(
    pl.col("time").dt.date().alias("date")
)
| time                | price | solar | date       |
| ---                 | ---   | ---   | ---        |
| datetime[µs]        | f64   | f64   | date       |
|---------------------|-------|-------|------------|
| 2025-07-05 00:00:00 | 34.2  | 0.0   | 2025-07-05 |
| 2025-07-05 01:00:00 | 28.7  | 0.0   | 2025-07-05 |
| 2025-07-05 02:00:00 | 27.5  | 0.0   | 2025-07-05 |
Transformación de datos con Polars

Extraer la hora

prices.with_columns(
    pl.col("time").dt.time().alias("time_of_day")
)
Transformación de datos con Polars

Extraer la hora

prices.with_columns(
    pl.col("time").dt.time().alias("time_of_day")
)
| time                | price | solar | time_of_day |
| ---                 | ---   | ---   | ---         |
| datetime[us]        | f64   | f64   | time        |
|---------------------|-------|-------|-------------|
| 2025-07-05 00:00:00 | 34.2  | 0.0   | 00:00:00    |
| 2025-07-05 01:00:00 | 28.7  | 0.0   | 01:00:00    |
| 2025-07-05 02:00:00 | 27.5  | 0.0   | 02:00:00    |
Transformación de datos con Polars

Extraer la hora (entera)

prices.with_columns(
    pl.col("time").dt.hour().alias("hour")
)
Transformación de datos con Polars

Extraer la hora (entera)

prices.with_columns(
    pl.col("time").dt.hour().alias("hour")
)
| time                | price | solar | hour |
| ---                 | ---   | ---   | ---  |
| datetime[µs]        | f64   | f64   | i8   |
|---------------------|-------|-------|------|
| 2025-07-05 00:00:00 | 34.2  | 0.0   | 0    |
| 2025-07-05 01:00:00 | 28.7  | 0.0   | 1    |
| 2025-07-05 12:00:00 | 0.0   | 462.0 | 12   |
Transformación de datos con Polars

Otros componentes de datetime

  • .dt.year() - extrae el año
  • .dt.month() - extrae el mes (1-12)
  • .dt.day() - extrae el día del mes
  • .dt.minute() - extrae el minuto
  • ...
1 https://docs.pola.rs/api/python/dev/reference/expressions/temporal.html
Transformación de datos con Polars

Ajustar datetimes

  • .dt.offset_by() - ajustar datetimes
  • "1h" - adelantar 1 hora
  • "-2d" - retrasar 2 días
Transformación de datos con Polars

Ajustar datetimes

  • .dt.offset_by() - ajustar datetimes
  • "1h" - adelantar 1 hora
  • "-2d" - retrasar 2 días
1 https://docs.pola.rs/api/python/stable/reference/expressions/api/polars.Expr.dt.offset_by.html
Transformación de datos con Polars

Añadir fin de ventana temporal

prices.with_columns(
    pl.col("time").dt.offset_by("1h")
)
Transformación de datos con Polars

Añadir fin de ventana temporal

prices.with_columns(
    pl.col("time").dt.offset_by("1h").alias("time_end")
)
Transformación de datos con Polars

Añadir fin de ventana temporal

prices.with_columns(
    pl.col("time").dt.offset_by("1h").alias("time_end")
)
| time                | price | solar | time_end            |
| ---                 | ---   | ---   | ---                 |
| datetime[µs]        | f64   | f64   | datetime[µs]        |
|---------------------|-------|-------|---------------------|
| 2025-07-05 00:00:00 | 34.2  | 0.0   | 2025-07-05 01:00:00 |
| 2025-07-05 01:00:00 | 28.7  | 0.0   | 2025-07-05 02:00:00 |
| 2025-07-05 02:00:00 | 27.5  | 0.0   | 2025-07-05 03:00:00 |
Transformación de datos con Polars

¡Vamos a practicar!

Transformación de datos con Polars

Preparing Video For Download...