날짜 파싱과 조작

Polars로 하는 데이터 변환

Liam Brannigan

Data Scientist & Polars Contributor

시계열 데이터

시장 가격 시계열

Polars로 하는 데이터 변환

시계열 데이터

매출 시계열

Polars로 하는 데이터 변환

시계열 데이터

스트림 시계열

Polars로 하는 데이터 변환

시계열 데이터

카운트 시계열

Polars로 하는 데이터 변환

전기 요금 데이터셋

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 - 시간별 값
  • price - MWh당 £
  • solar - 제곱미터당 W
  • solar > 400 = 따뜻한 여름날
Polars로 하는 데이터 변환

가격과 태양광의 관계

전기 요금 시계열

Polars로 하는 데이터 변환

가격과 태양광의 관계

전기 요금 시계열

Polars로 하는 데이터 변환

Polars의 datetime dtype

  • Date - 달력 날짜 - 2000-01-01
  • Datetime - 날짜와 시각 - 2000-01-01 12:00:00
  • Time - 하루 중 시각 - 12:00:00
  • Duration - 기간 - 3 hours
Polars로 하는 데이터 변환

자동 datetime 파싱

pl.read_csv(
  "electricity_prices",

)
Polars로 하는 데이터 변환

자동 datetime 파싱

pl.read_csv(
  "electricity_prices",
  try_parse_dates=True
)
  • 형식: YYYY-MM-DD
  • 예: 2025-07-05
  • 예: 2025-07-05 12:00:00
Polars로 하는 데이터 변환

수동 파싱이 필요함

| time             | price | solar |
| ---              | ---   | ---   |
| str              | f64   | f64   |
|------------------|-------|-------|
| 05/07/2025 00:00 | 34.2  | 0.0   |
| 05/07/2025 01:00 | 28.7  | 0.0   |
  • 형식: DD/MM/YYYY HH:MM
  • Polars가 자동 감지하지 않음
Polars로 하는 데이터 변환

strptime으로 파싱하기

prices.with_columns(
    pl.col("time").str.strptime(                             )
)
Polars로 하는 데이터 변환

strptime으로 파싱하기

prices.with_columns(
    pl.col("time").str.strptime(pl.Datetime,                 )
)
Polars로 하는 데이터 변환

strptime으로 파싱하기

prices.with_columns(
    pl.col("time").str.strptime(pl.Datetime, "%d/%m/%Y      ")
)
Polars로 하는 데이터 변환

strptime으로 파싱하기

prices.with_columns(
    pl.col("time").str.strptime(pl.Datetime, "%d/%m/%Y %H:%M")
)
Polars로 하는 데이터 변환

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   |
Polars로 하는 데이터 변환

Datetime 구성요소 추출

시계열 테이블

Polars로 하는 데이터 변환

Datetime 구성요소 추출

한 행에서 날짜가 강조된 시계열 테이블

Polars로 하는 데이터 변환

Datetime 구성요소 추출

한 행에서 시각이 강조된 시계열 테이블

Polars로 하는 데이터 변환

Datetime 구성요소 추출

한 행에서 시간(시)이 강조된 시계열 테이블

Polars로 하는 데이터 변환

날짜 추출

prices.with_columns(
    pl.col("time").dt.date()
)
Polars로 하는 데이터 변환

날짜 추출

prices.with_columns(
    pl.col("time").dt.date().alias("date")
)
Polars로 하는 데이터 변환

날짜 추출

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 |
Polars로 하는 데이터 변환

시각 추출

prices.with_columns(
    pl.col("time").dt.time().alias("time_of_day")
)
Polars로 하는 데이터 변환

시각 추출

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    |
Polars로 하는 데이터 변환

시간(시) 추출

prices.with_columns(
    pl.col("time").dt.hour().alias("hour")
)
Polars로 하는 데이터 변환

시간(시) 추출

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   |
Polars로 하는 데이터 변환

기타 datetime 구성요소

  • .dt.year() - 연도 추출
  • .dt.month() - 월 추출(1-12)
  • .dt.day() - 일 추출
  • .dt.minute() - 분 추출
  • ...
1 https://docs.pola.rs/api/python/dev/reference/expressions/temporal.html
Polars로 하는 데이터 변환

Datetime 조정

  • .dt.offset_by() - datetime 조정
  • "1h" - 1시간 뒤로 이동
  • "-2d" - 2일 앞으로 이동
Polars로 하는 데이터 변환

Datetime 조정

  • .dt.offset_by() - datetime 조정
  • "1h" - 1시간 뒤로 이동
  • "-2d" - 2일 앞으로 이동
1 https://docs.pola.rs/api/python/stable/reference/expressions/api/polars.Expr.dt.offset_by.html
Polars로 하는 데이터 변환

시간 창 종료 추가

prices.with_columns(
    pl.col("time").dt.offset_by("1h")
)
Polars로 하는 데이터 변환

시간 창 종료 추가

prices.with_columns(
    pl.col("time").dt.offset_by("1h").alias("time_end")
)
Polars로 하는 데이터 변환

시간 창 종료 추가

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 |
Polars로 하는 데이터 변환

Ayo berlatih!

Polars로 하는 데이터 변환

Preparing Video For Download...