본문 바로가기
코딩취미/Python

파이썬 리스트 vs Pandas vs NumPy 정렬 성능 비교

by 브링블링 2025. 4. 26.
반응형

파이썬 리스트 vs Pandas vs NumPy 정렬 성능 비교

파이썬에서 데이터를 다룰 때, 단순한 list를 사용할지,
혹은 고성능을 자랑하는 Pandas와 NumPy를 사용할지 고민해보신 적 있나요?

이번 글에서는 기본 리스트 정렬, Pandas 정렬, NumPy 정렬
실제로 동일한 조건에서 벤치마크하여 어떤 상황에 어떤 도구가 유리한지 살펴봅니다.


✅ 비교 대상 요약

라이브러리 정렬 함수 특징
파이썬 기본 리스트 sorted() / list.sort() 순수 파이썬, 유연하지만 느릴 수 있음
NumPy np.sort() 빠르고 메모리 효율적, C기반
Pandas df.sort_values() 편리한 기능 제공, 오버헤드 있음

✅ 테스트 환경

  • Python 3.11
  • NumPy 1.26+
  • Pandas 2.2+
  • 데이터 크기: 1,000,000개의 랜덤 숫자
  • 측정 도구: timeit

✅ 1. 데이터 준비

import random
import numpy as np
import pandas as pd

# 공통 데이터
N = 1_000_000
data_list = [random.randint(1, 1_000_000) for _ in range(N)]
data_np = np.array(data_list)
data_df = pd.DataFrame({'value': data_list})

✅ 2. 정렬 성능 측정

import time

# 리스트 정렬
start = time.time()
sorted_list = sorted(data_list)
print(f"Python sorted(): {time.time() - start:.4f}초")

# NumPy 정렬
start = time.time()
sorted_np = np.sort(data_np)
print(f"NumPy sort:      {time.time() - start:.4f}초")

# Pandas 정렬
start = time.time()
sorted_df = data_df.sort_values(by='value')
print(f"Pandas sort:     {time.time() - start:.4f}초")

✅ 결과 예시

Python sorted(): 0.2654초
NumPy sort:      0.0712초
Pandas sort:     0.3810초

💡 NumPy가 가장 빠르고,
Pandas는 오버헤드가 있어 느리지만 사용은 간편,
기본 리스트는 그 중간쯤 성능을 보입니다.

반응형

✅ 메모리 사용과 기능 비교

항목 파이썬 리스트 NumPy Pandas
메모리 효율 낮음 높음 낮음
속도 중간 매우 빠름 느림
기능 다양성 낮음 중간 매우 높음
편의성 보통 다소 낮음 매우 높음
다차원 정렬 직접 구현 필요 지원 매우 강력
안정성(Stable Sort) 지원 기본 지원 기본 지원

✅ 언제 어떤 정렬을 쓸까?

상황 추천 도구
단순 정수 리스트 sorted() 또는 np.sort()
대용량 수치 배열 NumPy (가장 빠름)
데이터프레임 기반 정렬 Pandas (sort_values, groupby, multiindex 등)
복잡한 조건, 다중 필드 Pandas
머신러닝 전처리 NumPy / Pandas 둘 다 가능 (속도 vs 기능 트레이드오프)

✅ 실무 팁

  • 수치 데이터만 정렬할 땐 NumPy가 최적
  • 컬럼 기준, 그룹 기준 정렬을 자주 한다면 Pandas가 더 강력
  • 파이썬 기본 list.sort()는 작은 규모 또는 커스텀 로직이 있을 때 유용
  • Pandas에서 정렬 속도를 높이고 싶다면 inplace=True, ignore_index=True 옵션을 사용하세요.

✅ 마무리

정렬은 데이터 분석과 처리에서 반드시 필요한 작업입니다. 성능이 중요한 상황에서는 NumPy, 유연성과 가독성이 중요할 땐 Pandas, 작고 단순한 데이터는 리스트 정렬로 충분합니다. 각 도구의 특징을 잘 알고 상황에 맞는 정렬 방법을 선택하세요!

반응형