Polars 바로 쓰기 — 설치·읽기/쓰기·표현식과 컨텍스트
Polars 바로 쓰기
Polars를 처음 쓸 때 필요한 건 설치, 파일 읽고·쓰기, 그리고 **표현식(expression)**이라는 개념이에요. 이 장은 기초 설치부터 핵심 기능까지 한 번에 이어서 다뤄요.
설치
pip install polars
읽기와 쓰기
CSV·JSON·Parquet 같은 일반 포맷과 S3, Azure Blob, BigQuery, postgres·mysql 같은 DB를 지원해요.
import polars as pl
import datetime as dt
df = pl.DataFrame({
"name": ["Alice Archer", "Ben Brown", "Chloe Cooper", "Daniel Donovan"],
"birthdate": [dt.date(1997, 1, 10), dt.date(1985, 2, 15), dt.date(1983, 3, 22), dt.date(1981, 4, 30)],
"weight": [57.9, 72.5, 53.6, 83.1],
"height": [1.56, 1.77, 1.66, 1.8],
})
df.write_csv("docs/assets/data/output.csv")
df_csv = pl.read_csv("docs/assets/data/output.csv", try_parse_dates=True)
print(df_csv)
표현식과 컨텍스트
Polars의 큰 강점은 데이터 변환을 모듈식·유연하게 표현하는 표현식이에요.
pl.col("weight") / (pl.col("height") ** 2)
이 표현식은 "weight"를 "height"의 제곱으로 나눠 BMI를 구해요. 다만 이것은 추상적 계산이고, Polars의 컨텍스트 안에서만 구체적인 시리즈로 실체화(materialize)돼요. 컨텍스트는 select, with_columns, filter, group_by가 있어요.
select
result = df.select(
pl.col("name"),
pl.col("birthdate").dt.year().alias("birth_year"),
(pl.col("weight") / (pl.col("height") ** 2)).alias("bmi"),
)
print(result)
with_columns
select와 비슷하지만 열을 선택하는 대신 추가해요.
result = df.with_columns(
birth_year=pl.col("birthdate").dt.year(),
bmi=pl.col("weight") / (pl.col("height") ** 2),
)
print(result)
filter
result = df.filter(
pl.col("birthdate").is_between(dt.date(1982, 12, 31), dt.date(1996, 1, 1)),
pl.col("height") > 1.7,
)
print(result)
group_by + agg
result = df.group_by(
(pl.col("birthdate").dt.year() // 10 * 10).alias("decade"),
maintain_order=True,
).len()
print(result)
maintain_order는 결과 그룹이 원본 순서를 따르도록 강제하는 옵션으로, 느려지지만 예제 재현성을 보장해요.
데이터프레임 결합
join으로 left outer join 같은 다양한 조인 알고리즘을, concat으로 세로·가로·대각 병합을 지원해요.