Datums parsen en bewerken

Data transformatie met Polars

Liam Brannigan

Data Scientist & Polars Contributor

Tijdreeksdata

Tijdreeks van marktprijzen

Data transformatie met Polars

Tijdreeksdata

Tijdreeks van verkoop

Data transformatie met Polars

Tijdreeksdata

Tijdreeks van streams

Data transformatie met Polars

Tijdreeksdata

Tijdreeks van aantallen

Data transformatie met Polars

Dataset elektriciteitsprijzen

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 - uurlijkse waarden
  • price - £ per megawattuur
  • solar - W per vierkante meter
  • solar > 400 = warme zomerdag
Data transformatie met Polars

Relatie tussen prijs en zonne-energie

Tijdreeks van elektriciteitsprijzen

Data transformatie met Polars

Relatie tussen prijs en zonne-energie

Tijdreeks van elektriciteitsprijzen

Data transformatie met Polars

Datetime-dtypes in Polars

  • Date - kalenderdatum - 2000-01-01
  • Datetime - datum en tijd - 2000-01-01 12:00:00
  • Time - tijdstip - 12:00:00
  • Duration - tijdsduur - 3 hours
Data transformatie met Polars

Automatisch datetimes parsen

pl.read_csv(
  "electricity_prices",

)
Data transformatie met Polars

Automatisch datetimes parsen

pl.read_csv(
  "electricity_prices",
  try_parse_dates=True
)
  • formaat: YYYY-MM-DD
  • bv. 2025-07-05
  • bv. 2025-07-05 12:00:00
Data transformatie met Polars

Onze data vereist handmatig parsen

| time             | price | solar |
| ---              | ---   | ---   |
| str              | f64   | f64   |
|------------------|-------|-------|
| 05/07/2025 00:00 | 34.2  | 0.0   |
| 05/07/2025 01:00 | 28.7  | 0.0   |
  • formaat: DD/MM/YYYY HH:MM
  • niet automatisch gedetecteerd door Polars
Data transformatie met Polars

Parsen met strptime

prices.with_columns(
    pl.col("time").str.strptime(                             )
)
Data transformatie met Polars

Parsen met strptime

prices.with_columns(
    pl.col("time").str.strptime(pl.Datetime,                 )
)
Data transformatie met Polars

Parsen met strptime

prices.with_columns(
    pl.col("time").str.strptime(pl.Datetime, "%d/%m/%Y      ")
)
Data transformatie met Polars

Parsen met strptime

prices.with_columns(
    pl.col("time").str.strptime(pl.Datetime, "%d/%m/%Y %H:%M")
)
Data transformatie met Polars

Parsen met 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   |
Data transformatie met Polars

Datetime-onderdelen extraheren

Tabel met tijdreeksdata

Data transformatie met Polars

Datetime-onderdelen extraheren

Tabel met tijdreeksdata met de datum gemarkeerd op één rij

Data transformatie met Polars

Datetime-onderdelen extraheren

Tabel met tijdreeksdata met de tijd gemarkeerd op één rij

Data transformatie met Polars

Datetime-onderdelen extraheren

Tabel met tijdreeksdata met het uur gemarkeerd op één rij

Data transformatie met Polars

De datum extraheren

prices.with_columns(
    pl.col("time").dt.date()
)
Data transformatie met Polars

De datum extraheren

prices.with_columns(
    pl.col("time").dt.date().alias("date")
)
Data transformatie met Polars

De datum extraheren

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 |
Data transformatie met Polars

De tijd extraheren

prices.with_columns(
    pl.col("time").dt.time().alias("time_of_day")
)
Data transformatie met Polars

De tijd extraheren

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    |
Data transformatie met Polars

Het uur extraheren

prices.with_columns(
    pl.col("time").dt.hour().alias("hour")
)
Data transformatie met Polars

Het uur extraheren

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   |
Data transformatie met Polars

Andere datetime-onderdelen

  • .dt.year() - jaar extraheren
  • .dt.month() - maand extraheren (1-12)
  • .dt.day() - dag van maand extraheren
  • .dt.minute() - minuut extraheren
  • ...
1 https://docs.pola.rs/api/python/dev/reference/expressions/temporal.html
Data transformatie met Polars

Datetimes aanpassen

  • .dt.offset_by() - datetimes aanpassen
  • "1h" - 1 uur vooruit
  • "-2d" - 2 dagen terug
Data transformatie met Polars

Datetimes aanpassen

  • .dt.offset_by() - datetimes aanpassen
  • "1h" - 1 uur vooruit
  • "-2d" - 2 dagen terug
1 https://docs.pola.rs/api/python/stable/reference/expressions/api/polars.Expr.dt.offset_by.html
Data transformatie met Polars

Einde tijdvenster toevoegen

prices.with_columns(
    pl.col("time").dt.offset_by("1h")
)
Data transformatie met Polars

Einde tijdvenster toevoegen

prices.with_columns(
    pl.col("time").dt.offset_by("1h").alias("time_end")
)
Data transformatie met Polars

Einde tijdvenster toevoegen

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 |
Data transformatie met Polars

Laten we oefenen!

Data transformatie met Polars

Preparing Video For Download...