Skip to content

Polars DataFrame: 고속 데이터 처리에 대한 소개

Updated on

판다스의 익숙한 영역을 넘어서, 파이썬 애호가들은 이제 Polars DataFrame의 고속, 효율적인 데이터 처리 능력을 받아들이고 있습니다. 대용량 데이터셋을 관리하기 위한 강력한 도구를 제공하는 이 DataFrame 라이브러리는 Rust에서 완전히 빌드된 것으로, 데이터 과학자와 분석가들 사이에서 인기를 얻고 있습니다. 이 포괄적인 가이드는 Polars DataFrame에 대한 깊은 이해를 전달하고, 그 기능성을 집중적으로 보여줌으로써 Pandas의 우수 대안으로 선보이고 있습니다.

판다스 대신 Polars 활용

빠른 비교를 통해 Polars가 Pandas보다 차별화된 이점을 보여줍니다. Pandas와는 달리, Polars는 DataFrame에 대한 인덱스 사용을 삼가며 데이터 조작을 상당히 간단하게 만듭니다. 게다가, Polars는 내부 데이터 표현에 Apache Arrow 배열을 사용하여 로드 시간, 메모리 사용 및 계산 효율성을 향상시킵니다. 더 나아가, Rust로 작성된 Polars는 많은 작업을 가속화하는 더 많은 병렬 연산을 제공합니다. 마지막으로, Polars는 Pandas에서 제공되지 않는 중요한 기능인 레이지 평가를 지원하여 필요한 경우 쿼리를 최적화하고 메모리 사용량을 최소화할 수 있습니다.

Polars DataFrame 시작하기

Polars를 설치하는 것은 간단합니다. pip 또는 conda 명령을 사용할 수 있습니다:

pip install polars
conda install polars

Polars DataFrame을 생성해 보면서 시작해 봅시다. 아래에서는 Polars 모듈을 가져와 DataFrame을 만듭니다:

import polars as pl
 
df = pl.DataFrame(
    {
        'Model': ['iPhone X','iPhone XS','iPhone 12','iPhone 13','Samsung S11','Samsung S12','Mi A1','Mi A2'],
        'Sales': [80,170,130,205,400,30,14,8],     
        'Company': ['Apple','Apple','Apple','Apple','Samsung','Samsung','Xiao Mi','Xiao Mi'],
    }
)
df

Polars는 Pandas와 달리, 열 헤더 이름을 문자열 타입으로 지정해야 합니다. 정수를 열 헤더 이름으로 사용하려면 문자열로 사용해야 합니다.

df2 = pl.DataFrame(
    {
        "0" : [1,2,3],
        "1" : [80,170,130],
    }
)

Polars의 각 열 데이터 타입도 열 헤더 이름과 함께 표시됩니다. 각 열의 데이터 타입을 명시적으로 표시하려면 dtypes 속성을 사용할 수 있습니다:

df.dtypes

열 이름을 검색하려면 속성(columns)을 사용하면 됩니다:

df.columns    # 결과: ['Model', 'Sales', 'Company']

DataFrame의 내용을 튜플의 리스트로 가져오려면 rows() 메서드를 사용하면 됩니다:

df.rows()

중요한 한 가지 기능은 Polars가 Pandas와 달리 index 개념을 사용하지 않는다는 것입니다. Polars의 설계 철학은 index가 데이터프레임에 특별히 유용하지 않다고 명시합니다.

Polars의 열 선택

Polars에서 열을 선택하는 것은 매우 간단합니다. select() 메서드를 사용하여 열 이름을 지정하면 됩니다:

df.select('Model')

위 문장은 'Model' 열을 포함하는 Polars DataFrame을 반환합니다. 그러나, Polars는 대괄호 인덱싱 방식을 사용하지 않는 것이 좋으며, 앞으로의 버전에서는 이 기능을 완전히 제거할 수도 있습니다. 여러 열을 선택하려면 열 이름을 리스트로 제공하면 됩니다:

df.select(['Model','Company'])

식(expressions)의 강력함은 Polars의 또 다른 주요 기능 중 하나입니다. 예를 들어 DataFrame의 모든 정수(Int64) 열을 검색하려면, select() 메서드내에서 식을 사용할 수 있습니다:

df.select(pl.col(pl.Int64))

Polars는 식을 서로 연결하는 독특한 방법을 가지고 있습니다. 아래 식은 'Model'과 'Sales' 열을 선택하고, 'Sales' 열의 값에 따라 행을 정렬합니다:

df.select(pl.col(['Model','Sales']).sort_by('Sales'))    

모든 문자열형 열을 검색하려면 pl.Utf8 속성을 사용하면 됩니다:

df.select([pl.col(pl.Utf8)])

Polars의 식은 이 글의 다음 부분에서 자세히 설명됩니다.

Polars에서 행 선택

DataFrame에서 단일 행을 선택하려면 row() 메서드를 사용하여 행 번호를 전달합니다:

df.row(0)   # 첫 번째 행 가져오기

이는 튜플을 반환합니다:

('iPhone X', 80, '애플')

다중 행을 선택할 때 Polars는 filter() 함수를 사용하도록 권장합니다. 예를 들어, Apple의 모든 제품을 검색하려는 경우 다음 식을 사용할 수 있습니다.

df.filter(pl.col('Company') == 'Apple')

논리 연산자를 사용하여 여러 조건을 지정할 수 있습니다.

df.filter((pl.col('Company') == 'Apple') | (pl.col('Company') == 'Samsung'))

Polars에서는 다음 논리 연산자를 사용할 수 있습니다.

  • | — OR
  • & — AND
  • ~ — Not

동시에 행과 열 선택하기

자주 행과 열을 동시에 선택하려고 할 것입니다. 이를 달성하기 위해 filter()select() 메서드를 연결하면 됩니다.

df.filter(pl.col('Company') == 'Apple').select('Model')

위 문장은 "Apple"을 포함하는 모든 행을 선택한 다음 "Model" 열만 표시합니다. "Sales" 열도 표시하려면 select() 메서드에 목록을 전달하세요.

df.filter(pl.col('Company') == 'Apple').select(['Model','Sales'])

Polars DataFrame은 지연 실행, 인덱스 없음 정책 및 병렬 작업 기능을 활용하여 전통적인 Pandas에 대한 효율적이고 고속의 대안을 제공합니다. 설치부터 복잡한 데이터 조작까지 Polars는 데이터 처리를 간소화하고 메모리 사용을 개선하는 강력한 도구로 나타납니다.

PyGWalker를 사용하여 Polars 데이터프레임 시각화하기

PyGWalker (opens in a new tab)는 Polars DataFrame에서 데이터 시각화를 쉽게 생성하는 데 도움을 주는 오픈 소스 패키지입니다.

PyGWalker for Data visualization (opens in a new tab)

Python 코딩으로 복잡한 처리를 완료할 필요가 없습니다. 데이터를 가져와 변수를 끌어서 놓기만 하면 다양한 종류의 데이터 시각화를 만들 수 있습니다! 운전 방법에 대한 간략한 데모 비디오가 여기에 있습니다.


Jupyter 노트북에서 PyGWalker를 사용하는 방법은 다음과 같습니다.

pip install pygwalker
import pygwalker as pyg
gwalker = pyg.walk(df)

대안으로 Kaggle Notebook/Google Colab에서 실행할 수도 있습니다:

Kaggle Notebook에서 PyGWalker 실행하기 (opens in a new tab)Google Colab에서 PyGWalker 실행하기 (opens in a new tab)GitHub에서 PyGWalker에 ⭐️ 주기 (opens in a new tab)
Kaggle Notebook에서 PyGWalker 실행하기 (opens in a new tab)Google Colab에서 PyGWalker 실행하기 (opens in a new tab)GitHub에서 PyGWalker에 ⭐️ 주기 (opens in a new tab)

PyGWalker는 오픈 소스 커뮤니티의 지원을 받아 개발되었습니다. PyGWalker GitHub (opens in a new tab)를 확인하고 ⭐️를 주세요!

자주 묻는 질문

  1. Pandas 대비 Polars의 주요 이점은 무엇인가요?

    Polars DataFrame은 Pandas보다 여러 가지 이점을 제공합니다. Apache Arrow 배열을 사용하여 효율적인 데이터 처리를 수행하며, 데이터 조작에 인덱스를 의존하지 않습니다. 병렬 연산을 지원하며, 요구사항에 따라 쿼리 최적화를 위한 지연 평가를 적용하여 메모리 사용을 개선합니다.

  2. Polars DataFrame에서 열을 선택하는 방법은 무엇인가요?

    Polars DataFrame은 select() 메서드를 제공하여 열을 선택할 수 있습니다. 단일 열을 선택하려면 열 이름을 문자열로 전달하거나 다중 열을 선택하려면 열 이름의 목록을 전달할 수 있습니다.

  3. Polars에서 특정 조건을 기반으로 행을 필터링하는 방법은 무엇인가요?

    filter() 메서드를 사용하여 특정 조건에 따라 행을 선택합니다. 이 메서드에 행을 필터링하기 위해 열을 특정 값에 대입하는 식을 전달할 수 있습니다. 또한 논리 연산자를 사용하여 여러 조건을 지정할 수 있습니다.