| <#ffffff,#1c1d1f> |
1. 개요
#!syntax python
import polars as plPolars (폴라스)는 정형 데이터 (테이블 데이터)를 전처리하는 Python 및 Rust 라이브러리다.[1] #
2. 역사
2020년, 리치 빈크 (Ritchie Vink)에 의해 pola.rs 프로젝트의 일환으로 개발되었다. 프로젝트명에서도 알 수 있듯이 Rust 기반으로 개발되어 메모리 누수나 보안에 내구성을 지니고 멀티코어 지원을 추가하였다. 또한, Apache Arrow 메모리 모델을 채택하여 데이터 프레임 (Data Frame)을 열 기반 (Columnar) 자료구조로 구현했다.3. 특성
- Apache Arrow 기반의 시계열 (Series), 데이터 프레임 (Data Frame) 자료형 구현
- 대량 처리 (Batch Processing)를 위한 레이지 프레임 (Lazy Frame) 자료형 구현[2]
- SQL 쿼리와 유사한 필터링 문법
- 인덱싱 최소화
- 다양한 벡터 연산 도입
- 멀티 코어 지원
- CUDA 지원 (GPU 전용 빌드 설치 필요)
Polars의 주요 코드는 Rust로 작성되었다. CPU 연산만으로도 Pandas보다 20배 빠른 연산속도를 보여준다. 일단 빅데이터 작업은 처리 속도가 빠른 Polars가 압도적으로 쓰인다.
한편, 기능상으로 Pandas를 써야 하는 경우에는 Apache Spark 내에 있는 Pandas 모듈이나 NVIDIA가 CUDA 전용으로 이식한 Pandas 모듈인 cudf를 주로 쓴다. 레퍼런스 Pandas 모듈은 GIL (Global Interruption Lock)의 영향을 받아 데이터 병렬 처리가 불가능하다보니 학습용이 아니고서는 잘 안쓴다.
4. 여담
- 2020년에 출시된 이후로 해외에서는 상당수의 Pandas로 짜여진 Python 코드들이 Polars로 대체되었고, 국내에서도 우아한형제들 (배달의민족) 등을 포함하여 몇몇 대기업과 유니콘 기업들이 Pandas가 쓰인 레거시 코드를 Polars 사용 코드로 재작성하고 있다.
- CPU만으로도 Pandas보다 20배 이상 빠른 Polars의 인기로 인해 북극곰 (Polars)은 판다 (Pandas)를 찢어라는 드립도 나왔다.
- 엑셀 파일을 여러 개의 시트로 읽거나 저장할 때에는 openpyxl, fastexcel, xlsxwriter가 필요하다.
- Polars에는 Pandas 인스턴스를 Polars 인스턴스로 바꿔주는 from_pandas와 Polars 인스턴스를 Pandas 인스턴스로 바꿔주는 to_pandas 함수가 있다.