데이터 전처리 및 연산작업에 주로 활용하는 패키지는 Pandas 입니다. 그러던 중 다음의 문서를 발견하게 되었습니다.

Pandas vs. Polars

해당 문서를 참고해 보면, Pandas 자체가 오래된 패키지여서 여러가지 기능들이 추가되다 보니, 과거의 낮은 효율의 부품들이 제대로 교체되지 않고 계속 남아 있음으로 인하여 성능저하가 발생하였다는 내용 입니다.

  • 큰 그림을 그리는 사람이 가장 큰 열매를 가져간다.
  • 중요하고 필요한 기능에 한정하여 집중하고, 불필요하고 나머지 내용들은 향후에 참고하며 작업의 진도에 집중하기


Install

우분투 서버의 CPU 에서 다음의 기능들을 지원하는 경우에는 pip install 'polars[all]' 로 바로 설치 및 활용을 하면 됩니다.

$ cat /proc/cpuinfo | grep -oE 'avx|avx2|fma|bmi1|bmi2|lzcnt' | sort | uniq

avx
avx2
bmi1
bmi2
fma

$ pip install 'polars[all]'

저사양 CPU 인 경우는 다음의 기능을 지원하지 않는 경우도 발생합니다. (구형 M1 맥북의 경우가 다음에 해당합니다)

$ cat /proc/cpuinfo | grep -oE 'avx|avx2|fma|bmi1|bmi2|lzcnt' | sort | uniq

이러한 경우에는 polars-lts-cpu 를 대신 설치하면 됩니다

$ pip uninstall 'polars[all]'
$ pip install polars-lts-cpu


Python Run

앞에서 진행한 확인과정을 Python 스크립트로 구성을 해보면 다음과 같습니다.

import os
import subprocess
# Your Ubuntu CLI script as a Python string
ubuntu_script = """#!/bin/bash
cat /proc/cpuinfo | grep -oE 'avx|avx2|fma|bmi1|bmi2|lzcnt' | sort | uniq"""
# Run the script using subprocess
result = subprocess.run(['bash', '-c', ubuntu_script], capture_output=True, text=True)
result.stdout

'avx\navx2\nbmi1\nbmi2\nfma\n'

패키지 2가지 모두 Python CLI 에서 실행은 import polars 로 동일하게 진행 됩니다.

In [1]: import polars as pl
   ...: pl.DataFrame({'A':[1,2],'B':['A','D']})
Out[1]: 
shape: (4, 2)
┌─────┬─────┐
 A    B   
 ---  --- 
 i64  str 
╞═════╪═════╡
 1    A   
 2    D   
└─────┴─────┘

참고사이트