Polars 내장 함수 알아보기

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 라이브러리에서 제공하는 매우 기본적이고 기초적인 내장 함수에 대해서 알아보았습니다.
다음 포스팅에서는 열의 데이터 유형을 변환하는 함수에 대해서 알아보겠습니다.

감사합니다!

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다