Analyser et manipuler des dates

Transformation de données avec Polars

Liam Brannigan

Data Scientist & Polars Contributor

Données de séries temporelles

Série temporelle des prix de marché

Transformation de données avec Polars

Données de séries temporelles

Série temporelle des ventes

Transformation de données avec Polars

Données de séries temporelles

Série temporelle des flux

Transformation de données avec Polars

Données de séries temporelles

Série temporelle du comptage

Transformation de données avec Polars

Jeu de données des prix de l’électricité

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 - valeurs horaires
  • price - £ par mégawattheure
  • solar - W par mètre carré
  • solar > 400 = chaude journée d’été
Transformation de données avec Polars

Lien prix–solaire

Série temporelle des prix de l’électricité

Transformation de données avec Polars

Lien prix–solaire

Série temporelle des prix de l’électricité

Transformation de données avec Polars

Types datetime dans Polars

  • Date - date du calendrier - 2000-01-01
  • Datetime - date et heure - 2000-01-01 12:00:00
  • Time - heure du jour - 12:00:00
  • Duration - durée - 3 hours
Transformation de données avec Polars

Analyse automatique des datetime

pl.read_csv(
  "electricity_prices",

)
Transformation de données avec Polars

Analyse automatique des datetime

pl.read_csv(
  "electricity_prices",
  try_parse_dates=True
)
  • format : YYYY-MM-DD
  • ex. 2025-07-05
  • ex. 2025-07-05 12:00:00
Transformation de données avec Polars

Nos données nécessitent un parse manuel

| time             | price | solar |
| ---              | ---   | ---   |
| str              | f64   | f64   |
|------------------|-------|-------|
| 05/07/2025 00:00 | 34.2  | 0.0   |
| 05/07/2025 01:00 | 28.7  | 0.0   |
  • format : DD/MM/YYYY HH:MM
  • non détecté automatiquement par Polars
Transformation de données avec Polars

Analyser avec strptime

prices.with_columns(
    pl.col("time").str.strptime(                             )
)
Transformation de données avec Polars

Analyser avec strptime

prices.with_columns(
    pl.col("time").str.strptime(pl.Datetime,                 )
)
Transformation de données avec Polars

Analyser avec strptime

prices.with_columns(
    pl.col("time").str.strptime(pl.Datetime, "%d/%m/%Y      ")
)
Transformation de données avec Polars

Analyser avec strptime

prices.with_columns(
    pl.col("time").str.strptime(pl.Datetime, "%d/%m/%Y %H:%M")
)
Transformation de données avec Polars

Analyser avec 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   |
Transformation de données avec Polars

Extraire des composants datetime

Table de données de série temporelle

Transformation de données avec Polars

Extraire des composants datetime

Table de série temporelle avec la date surlignée sur une ligne

Transformation de données avec Polars

Extraire des composants datetime

Table de série temporelle avec l’heure surlignée sur une ligne

Transformation de données avec Polars

Extraire des composants datetime

Table de série temporelle avec l’heure (heure) surlignée sur une ligne

Transformation de données avec Polars

Extraire la date

prices.with_columns(
    pl.col("time").dt.date()
)
Transformation de données avec Polars

Extraire la date

prices.with_columns(
    pl.col("time").dt.date().alias("date")
)
Transformation de données avec Polars

Extraire la date

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 |
Transformation de données avec Polars

Extraire l’heure

prices.with_columns(
    pl.col("time").dt.time().alias("time_of_day")
)
Transformation de données avec Polars

Extraire l’heure

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    |
Transformation de données avec Polars

Extraire l’heure (heure)

prices.with_columns(
    pl.col("time").dt.hour().alias("hour")
)
Transformation de données avec Polars

Extraire l’heure (heure)

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   |
Transformation de données avec Polars

Autres composants datetime

  • .dt.year() - extrait l’année
  • .dt.month() - extrait le mois (1-12)
  • .dt.day() - extrait le jour du mois
  • .dt.minute() - extrait les minutes
1 https://docs.pola.rs/api/python/dev/reference/expressions/temporal.html
Transformation de données avec Polars

Ajuster des datetime

  • .dt.offset_by() - ajuster des datetime
  • "1h" - avancer de 1 heure
  • "-2d" - reculer de 2 jours
Transformation de données avec Polars

Ajuster des datetime

  • .dt.offset_by() - ajuster des datetime
  • "1h" - avancer de 1 heure
  • "-2d" - reculer de 2 jours
1 https://docs.pola.rs/api/python/stable/reference/expressions/api/polars.Expr.dt.offset_by.html
Transformation de données avec Polars

Ajouter une fin de fenêtre temporelle

prices.with_columns(
    pl.col("time").dt.offset_by("1h")
)
Transformation de données avec Polars

Ajouter une fin de fenêtre temporelle

prices.with_columns(
    pl.col("time").dt.offset_by("1h").alias("time_end")
)
Transformation de données avec Polars

Ajouter une fin de fenêtre temporelle

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 |
Transformation de données avec Polars

Passons à la pratique !

Transformation de données avec Polars

Preparing Video For Download...