Analisando e manipulando datas

Transformação de Dados com Polars

Liam Brannigan

Data Scientist & Polars Contributor

Dados de séries temporais

Série temporal de preços de mercado

Transformação de Dados com Polars

Dados de séries temporais

Série temporal de vendas

Transformação de Dados com Polars

Dados de séries temporais

Série temporal de streams

Transformação de Dados com Polars

Dados de séries temporais

Série temporal de contagens

Transformação de Dados com Polars

Conjunto de dados de preços de eletricidade

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 megawatt-hora
  • solar - W por metro quadrado
  • solar > 400 = dia quente de verão
Transformação de Dados com Polars

Relação entre preço e solar

Série temporal de preços de eletricidade

Transformação de Dados com Polars

Relação entre preço e solar

Série temporal de preços de eletricidade

Transformação de Dados com Polars

Tipos datetime no Polars

  • Date - data do calendário - 2000-01-01
  • Datetime - data e hora - 2000-01-01 12:00:00
  • Time - hora do dia - 12:00:00
  • Duration - duração - 3 hours
Transformação de Dados com Polars

Parse automático de datetime

pl.read_csv(
  "electricity_prices",

)
Transformação de Dados com Polars

Parse automático de datetime

pl.read_csv(
  "electricity_prices",
  try_parse_dates=True
)
  • formato: YYYY-MM-DD
  • ex.: 2025-07-05
  • ex.: 2025-07-05 12:00:00
Transformação de Dados com Polars

Nosso dado precisa de parse 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
  • não é detectado automaticamente pelo Polars
Transformação de Dados com Polars

Fazendo parse com strptime

prices.with_columns(
    pl.col("time").str.strptime(                             )
)
Transformação de Dados com Polars

Fazendo parse com strptime

prices.with_columns(
    pl.col("time").str.strptime(pl.Datetime,                 )
)
Transformação de Dados com Polars

Fazendo parse com strptime

prices.with_columns(
    pl.col("time").str.strptime(pl.Datetime, "%d/%m/%Y      ")
)
Transformação de Dados com Polars

Fazendo parse com strptime

prices.with_columns(
    pl.col("time").str.strptime(pl.Datetime, "%d/%m/%Y %H:%M")
)
Transformação de Dados com Polars

Fazendo parse com 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   |
Transformação de Dados com Polars

Extraindo componentes de datetime

Tabela com dados de série temporal

Transformação de Dados com Polars

Extraindo componentes de datetime

Tabela de série temporal com a data destacada em uma linha

Transformação de Dados com Polars

Extraindo componentes de datetime

Tabela de série temporal com a hora destacada em uma linha

Transformação de Dados com Polars

Extraindo componentes de datetime

Tabela de série temporal com a hora do dia destacada em uma linha

Transformação de Dados com Polars

Extraindo a data

prices.with_columns(
    pl.col("time").dt.date()
)
Transformação de Dados com Polars

Extraindo a data

prices.with_columns(
    pl.col("time").dt.date().alias("date")
)
Transformação de Dados com Polars

Extraindo a 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 |
Transformação de Dados com Polars

Extraindo a hora do dia

prices.with_columns(
    pl.col("time").dt.time().alias("time_of_day")
)
Transformação de Dados com Polars

Extraindo a hora do dia

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    |
Transformação de Dados com Polars

Extraindo a hora

prices.with_columns(
    pl.col("time").dt.hour().alias("hour")
)
Transformação de Dados com Polars

Extraindo a hora

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   |
Transformação de Dados com Polars

Outros componentes de datetime

  • .dt.year() - extrai o ano
  • .dt.month() - extrai o mês (1-12)
  • .dt.day() - extrai o dia do mês
  • .dt.minute() - extrai o minuto
  • ...
1 https://docs.pola.rs/api/python/dev/reference/expressions/temporal.html
Transformação de Dados com Polars

Ajustando datetimes

  • .dt.offset_by() - ajusta datetimes
  • "1h" - avança 1 hora
  • "-2d" - volta 2 dias
Transformação de Dados com Polars

Ajustando datetimes

  • .dt.offset_by() - ajusta datetimes
  • "1h" - avança 1 hora
  • "-2d" - volta 2 dias
1 https://docs.pola.rs/api/python/stable/reference/expressions/api/polars.Expr.dt.offset_by.html
Transformação de Dados com Polars

Adicionando fim da janela de tempo

prices.with_columns(
    pl.col("time").dt.offset_by("1h")
)
Transformação de Dados com Polars

Adicionando fim da janela de tempo

prices.with_columns(
    pl.col("time").dt.offset_by("1h").alias("time_end")
)
Transformação de Dados com Polars

Adicionando fim da janela de tempo

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 |
Transformação de Dados com Polars

Vamos praticar!

Transformação de Dados com Polars

Preparing Video For Download...