pandas vs polars
| 기능 | Pandas | Polars |
| 속도 | 단일 코어 실행 (느림) | 멀티코어 지원 (빠름) |
| 메모리 사용 | 메모리 내에서만 처리 가능 | Lazy Execution 지원 |
| API 스타일 | 즉시 실행 | 즉시 실행 + 지연 실행 가능 |
| 대용량 데이터 | 비효율적 | 최적화됨 |
- Polars는 Pandas보다 빠르고, 더 적은 메모리를 사용하며, 멀티코어 활용이 뛰어난 고성능 데이터 프레임 라이브러리
- Rust로 구현
- polars는 전체 코드를 쭉 보고 효율적인 방향으로 알아서 실행해줌. pandas는 작성 순서대로 연산.
!pip install polars
import pandas as pd
import polars as pl
import numpy as np
#데이터생성
rows = int(1E7) # 1000*10000
data = {
'id': np.arange(rows),
'category': np.random.choice(list('ABCD'),rows), #['a'...] 보다 list('abcd') 이렇게 씀
'value': np.random.rand(rows)*100, #random.rand 는 균등분포가 생성됨
'count' : np.random.randint(1,100,rows), #1부터 99까지 수 랜덤
}
df = pd.DataFrame(data)
df.tail(2)
df.dtypes
pd_df = pd.DataFrame(data)
pd_df.tail(2)
pl_df = pl.DataFrame(data)
pl_df.tail(2)
#기본연산 #여섯배 빠름
%%timeit
pd_mean = pd_df['value'].mean()
pd_sum = pd_df['count'].sum()
#36.8 ms ± 472 μs per loop (mean ± std. dev. of 7 runs, 10 loops each)
%%timeit
pl_mean = pl_df['value'].mean()
pl_sum = pl_df['count'].sum()
#6.81 ms ± 48.5 μs per loop (mean ± std. dev. of 7 runs, 100 loops each)
# 3. 데이터 필터링 #1.5배 빠름
%%timeit
pd_filter = pd_df[pd_df['value'] > 50]
#143 ms ± 5.58 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)
%%timeit
pl_filter = pl_df.filter(pl_df['value'] > 50)
#89.2 ms ± 27.3 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)
# 4. 데이터 그룹핑 #polars가 다섯배 빠름(특히나 그루핑은 폴라스가 멀티코어를 사용하기 때문에 훨씬 빠름)
%%timeit
pdgb = pd_df.groupby('category')['value'].mean()
#432 ms ± 5.67 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
%%timeit
plgb = pl_df.group_by('category').agg(pl.col('value').mean())
#80.2 ms ± 7.3 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)
'SQL, Database' 카테고리의 다른 글
| SQL 컨벤션 공부하기 (0) | 2025.12.05 |
|---|---|
| SQL: 테이블 복제하기 (0) | 2025.10.08 |
| 데이터프레임 최적화 (3) | 2025.08.19 |
| 데이터 파일 크기가 클 때 sql로 불러오기(feat. python) (0) | 2025.08.19 |
| MYSQL: 용량 큰 .sql파일 불러오기 (0) | 2025.08.19 |