Parsing e manipolazione delle date

Trasformazione dei dati con Polars

Liam Brannigan

Data Scientist & Polars Contributor

Dati di serie temporali

Serie temporali dei prezzi di mercato

Trasformazione dei dati con Polars

Dati di serie temporali

Serie temporali delle vendite

Trasformazione dei dati con Polars

Dati di serie temporali

Serie temporali degli stream

Trasformazione dei dati con Polars

Dati di serie temporali

Serie temporali dei conteggi

Trasformazione dei dati con Polars

Dataset prezzi dell’elettricità

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 - valori orari
  • price - £ per Megawattora
  • solar - W per metro quadrato
  • solar > 400 = calda giornata estiva
Trasformazione dei dati con Polars

Relazione tra prezzo e solare

Serie temporale dei prezzi dell’elettricità

Trasformazione dei dati con Polars

Relazione tra prezzo e solare

Serie temporale dei prezzi dell’elettricità

Trasformazione dei dati con Polars

Tipi datetime in Polars

  • Date - data del calendario - 2000-01-01
  • Datetime - data e ora - 2000-01-01 12:00:00
  • Time - ora del giorno - 12:00:00
  • Duration - intervallo di tempo - 3 hours
Trasformazione dei dati con Polars

Parsing automatico di datetime

pl.read_csv(
  "electricity_prices",

)
Trasformazione dei dati con Polars

Parsing automatico di datetime

pl.read_csv(
  "electricity_prices",
  try_parse_dates=True
)
  • formato: YYYY-MM-DD
  • es. 2025-07-05
  • es. 2025-07-05 12:00:00
Trasformazione dei dati con Polars

I nostri dati richiedono parsing manuale

| 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
  • non rilevato automaticamente da Polars
Trasformazione dei dati con Polars

Parsing con strptime

prices.with_columns(
    pl.col("time").str.strptime(                             )
)
Trasformazione dei dati con Polars

Parsing con strptime

prices.with_columns(
    pl.col("time").str.strptime(pl.Datetime,                 )
)
Trasformazione dei dati con Polars

Parsing con strptime

prices.with_columns(
    pl.col("time").str.strptime(pl.Datetime, "%d/%m/%Y      ")
)
Trasformazione dei dati con Polars

Parsing con strptime

prices.with_columns(
    pl.col("time").str.strptime(pl.Datetime, "%d/%m/%Y %H:%M")
)
Trasformazione dei dati con Polars

Parsing 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   |
Trasformazione dei dati con Polars

Estrarre componenti datetime

Tabella di serie temporali

Trasformazione dei dati con Polars

Estrarre componenti datetime

Tabella di serie temporali con la data evidenziata in una riga

Trasformazione dei dati con Polars

Estrarre componenti datetime

Tabella di serie temporali con l’ora evidenziata in una riga

Trasformazione dei dati con Polars

Estrarre componenti datetime

Tabella di serie temporali con l’ora del giorno evidenziata in una riga

Trasformazione dei dati con Polars

Estrarre la data

prices.with_columns(
    pl.col("time").dt.date()
)
Trasformazione dei dati con Polars

Estrarre la data

prices.with_columns(
    pl.col("time").dt.date().alias("date")
)
Trasformazione dei dati con Polars

Estrarre la data

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 |
Trasformazione dei dati con Polars

Estrarre l’ora

prices.with_columns(
    pl.col("time").dt.time().alias("time_of_day")
)
Trasformazione dei dati con Polars

Estrarre l’ora

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    |
Trasformazione dei dati con Polars

Estrarre l’ora (hour)

prices.with_columns(
    pl.col("time").dt.hour().alias("hour")
)
Trasformazione dei dati con Polars

Estrarre l’ora (hour)

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   |
Trasformazione dei dati con Polars

Altri componenti datetime

  • .dt.year() - estrae l’anno
  • .dt.month() - estrae il mese (1-12)
  • .dt.day() - estrae il giorno del mese
  • .dt.minute() - estrae il minuto
  • ...
1 https://docs.pola.rs/api/python/dev/reference/expressions/temporal.html
Trasformazione dei dati con Polars

Regolare i datetime

  • .dt.offset_by() - regola datetime
  • "1h" - avanti di 1 ora
  • "-2d" - indietro di 2 giorni
Trasformazione dei dati con Polars

Regolare i datetime

  • .dt.offset_by() - regola datetime
  • "1h" - avanti di 1 ora
  • "-2d" - indietro di 2 giorni
1 https://docs.pola.rs/api/python/stable/reference/expressions/api/polars.Expr.dt.offset_by.html
Trasformazione dei dati con Polars

Aggiungere la fine della finestra temporale

prices.with_columns(
    pl.col("time").dt.offset_by("1h")
)
Trasformazione dei dati con Polars

Aggiungere la fine della finestra temporale

prices.with_columns(
    pl.col("time").dt.offset_by("1h").alias("time_end")
)
Trasformazione dei dati con Polars

Aggiungere la fine della finestra temporale

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 |
Trasformazione dei dati con Polars

Ayo berlatih!

Trasformazione dei dati con Polars

Preparing Video For Download...