넘파이 함수

넘파이 함수 (Numpy functions)

Polars 표현식에는 NumPy의 유니버설 함수(ufunc)를 그대로 쓸 수 있어요. 다시 말해, Polars가 아직 제공하지 않는 함수라도 NumPy를 통해서라면 빠른 칼럼 연산(columnar operation)을 계속 누릴 수 있다는 뜻이에요. 이 섹션에서는 표현식 안에서 NumPy 함수를 어떻게 조합하는지, 그리고 그 과정에서 꼭 알아둬야 할 상호 운용성(interoperability)의 한계를 함께 살펴볼게요.

출처: 공식문서

예시 (Example)

아래는 모든 칼럼에 np.log를 적용하고, 그 이름 뒤에 _log 접미사를 붙인 예시입니다. pl.all()이 모든 칼럼을 가리키고, name.suffix가 출력 칼럼 이름을 바꿔줘요.

import polars as pl
import numpy as np

df = pl.DataFrame({"a": [1, 2, 3], "b": [4, 5, 6]})

out = df.select(np.log(pl.all()).name.suffix("_log"))
print(out)
shape: (3, 2)
┌──────────┬──────────┐
│ a_log    ┆ b_log    │
│ ---      ┆ ---      │
│ f64      ┆ f64      │
╞══════════╪══════════╡
│ 0.0      ┆ 1.386294 │
│ 0.693147 ┆ 1.609438 │
│ 1.098612 ┆ 1.791759 │
└──────────┴──────────┘

상호 운용성 (Interoperability)

Polars의 시리즈는 NumPy 유니버설 함수(ufunc)와 일반화된 유니버설 함수(고유펑)를 모두 지원해요. np.exp, np.cos, np.div 같은 요소별 함수는 거의 오버헤드 없이 동작합니다.

다만 한 가지 짚고 넘어갈 점이 있어요. Polars는 결측값을 별도의 비트마스크로 추적하는데, NumPy는 이 정보를 받지 못해요. 그래서 결측값이 있는 시리즈를 일반화된 ufunc(예: 윈도우 함수나 np.convolve)에 넘기면 결과가 어긋나거나 불완전해질 수 있어서, 이 경우 Polars는 오류를 던집니다. 결측값을 포함한 시리즈를 NumPy 배열로 바꾸려면 to_numpy 함수를 쓰면 되는데, 변환 과정에서 결측값은 np.nan으로 대체돼요.

더 알아보기 (Learn more)