Polars 표현식에는 수많은 내장 함수가 있습니다. 이를 사용하면, 사용자 정의 함수 없이도 복잡한 쿼리를 생성할 수 있습니다. 여기에서 다루어야 할 내용이 너무 많지만, 가장 널리 사용되는 Polars 내장 함수 에 대해서 알아보겠습니다.
임시 데이터프레임 생성
아래 예에서는 다음 DataFrame을 사용합니다.
import polars as pl
import numpy as np
tempData = pl.DataFrame(
{
"nrs": [1, 2, 3, None, 5],
"names": ["foo", "ham", "spam", "egg", "spam"],
"random": np.random.rand(5),
"groups": ["A", "A", "B", "C", "B"],
}
)
print(tempData)
열 이름 지정하기
기본적으로 표현식을 수행하면 기본적으로 열과 동일한 이름이 유지됩니다. 아래 예에서는 nrs 열에 대해 표현식을 수행합니다. 출력 데이터프레임의 이름은 여전히 동일합니다.
tempDataSameName = tempData.select(pl.col("nrs") + 5)
print(tempDataSameName)
출력 열이 중복되므로 표현식에서 동일한 열을 여러 번 사용하는 경우 문제가 발생할 수 있습니다. 예를 들어 아래와 같은 쿼리는 실패합니다.
try:
tempDataSameName2 = tempData.select(pl.col("nrs") + 5, pl.col("nrs") - 5)
print(tempDataSameName2)
except Exception as e:
print(e)
---------------------------------------------------------------------------------
the name: 'nrs' is duplicate
It's possible that multiple expressions are returning the same default column name. If this is the case, try renaming the columns with `.alias("new_name")` to avoid duplicate column names.
alias 함수를 사용하여 표현식의 출력 열 이름을 변경할 수 있습니다.
tempDataAlias = tempData.select(
(pl.col("nrs") + 5).alias("nrs + 5"),
(pl.col("nrs") - 5).alias("nrs - 5"),
)
print(tempDataAlias)
예를 들어 all() 또는 col(*)을 사용할 때 여러 열이 있는 경우 매핑 함수 name.map을 적용하여 원래 열 이름을 다른 이름으로 변경할 수 있습니다. 접미사(name.suffix()) 또는 접두사(name.prefix())를 추가하려는 경우에도 이는 함수로 내장되어 있습니다.
고유한 값 계산
Polars에서 고유한 값을 계산하는 방법에는 정확한 방법과 근사치라는 두 가지 방법이 있습니다. 근사치는 HyperLogLog++ 알고리즘을 사용하여 카디널리티를 근사화하며 근사치가 충분히 좋은 매우 큰 데이터 세트에 특히 유용합니다.
tempDataAlias = tempData.select(
pl.col("names").n_unique().alias("unique"),
pl.approx_n_unique("names").alias("unique_approx"),
)
print(tempDataAlias)
조건부
Polars는 when, then, else 구문이 있는 표현식에서 if-else와 같은 조건을 지원합니다. 조건자는 when 절에 배치되며 이것이 true로 평가되면 then 표현식이 적용되고, 그렇지 않으면 else 표현식이 적용됩니다(행 기준).
tempDataConditional = tempData.select(
pl.col("nrs"),
pl.when(pl.col("nrs") > 2)
.then(pl.lit(True))
.otherwise(pl.lit(False))
.alias("conditional"),
)
print(tempDataConditional)
결론
이번 포스팅에서는 Polars 라이브러리에서 제공하는 매우 기본적이고 기초적인 내장 함수에 대해서 알아보았습니다.
다음 포스팅에서는 열의 데이터 유형을 변환하는 함수에 대해서 알아보겠습니다.
감사합니다!