Python

Pandas가 NumPy를 버린 이유: PyArrow가 바꾸는 데이터 분석의 속도 게임

파파누보 2025. 5. 31. 23:42
728x90
반응형

https://thenewstack.io/python-pandas-ditches-numpy-for-speedier-pyarrow/?utm_campaign=trueanthem&utm_medium=social&utm_source=facebook&fbclid=IwY2xjawKnYOtleHRuA2FlbQIxMQBicmlkETEzdTBFV1kyeE5rOU90NmJCAR6rS7lzDk87kcletkh1Tgt9xebGbOatAVE9iZoKOmjfJho_7yyti1Khj6RjRg_aem_9Hb9z1uED173L5HhcX6rVA

데이터 분석 작업에서 Pandas는 오랜 시간 핵심 도구로 자리 잡아 왔습니다. 하지만 최근 Pandas가 오랜 파트너였던 NumPy를 대신해 PyArrow를 기본 엔진으로 채택하려는 움직임을 보이고 있습니다. 많은 개발자들이 이에 대해 궁금해하고 걱정하기도 합니다. "기존 코드는 어떻게 되지?", "PyArrow가 진짜 빠른가?", "지금부터 바꿔야 하나?"

이번 블로그에서는 Pandas 3.0에서 벌어지고 있는 큰 변화를 살펴보며, 왜 PyArrow가 주목받는지, NumPy가 가진 한계는 무엇이었는지, 그리고 실제로 어떤 이점을 기대할 수 있는지를 정리해드립니다.

반응형

Pandas의 시작과 현재 – 그리고 문제점

Pandas는 2008년 금융 데이터를 처리하기 위해 만들어졌습니다. 당시에는 과학 계산에 특화된 NumPy 위에 구축하는 것이 최선의 선택이었습니다. Pandas의 Series와 DataFrame은 각각 NumPy의 1차원, 2차원 배열을 감싸는 형태로 구성돼 있었고, 벡터 연산과 C 언어 기반 구현 덕분에 Python 기본 기능보다 훨씬 빠른 속도를 제공했습니다.

하지만 시간이 지나며 데이터의 양과 복잡성이 증가하면서 NumPy 기반 Pandas는 다음과 같은 한계에 부딪히게 됩니다.

  • 데이터는 대부분 열 중심(Columnar)인데, NumPy는 행(Row) 중심 저장 구조를 사용
  • 다중 스레드를 지원하지 않아 병렬 처리가 어려움
  • 날짜, 문자열, 중첩 구조 등 복잡한 데이터 타입에 비효율적
  • 압축이나 배치 처리 기능이 부족함

이로 인해 대용량 데이터를 다루는 분석가들은 느린 처리 속도와 높은 메모리 사용량에 시달려야 했습니다.


PyArrow란 무엇인가?

PyArrow는 Apache Arrow 프로젝트의 Python 바인딩입니다. Apache Arrow는 Pandas의 창시자인 Wes McKinney가 다시 한 번 주도적으로 만든 프로젝트로, 메모리 내 데이터 표현 방식을 완전히 바꿉니다. 열 중심(Columnar) 메모리 구조를 기반으로 하며, 데이터를 디스크와 메모리 간에 효율적으로 이동시키는 데 최적화돼 있습니다.

PyArrow의 주요 장점은 다음과 같습니다.

  • 열 단위 데이터 접근으로 빠른 연산과 검색 가능
  • 다양한 오픈소스 데이터 처리 엔진(Spark, Flink 등)과 호환
  • AI 프레임워크(TensorFlow 등)와 잘 통합
  • Copy-on-Write 기능을 통한 메모리 최적화
  • Feather 및 Parquet 같은 효율적인 이진 포맷 지원

이러한 특성은 특히 대용량 데이터를 빠르게 읽고 처리해야 하는 현대의 데이터 분석 환경에 잘 맞습니다.


PyArrow와 NumPy의 성능 차이

실제 성능 차이는 수치로도 확연히 드러납니다. 파이썬 교육자 Reuven Lerner는 뉴욕시 2020년 주차위반 데이터(CSV, 약 2.2GB, 1,200만 행)를 기준으로 성능 비교 테스트를 진행했습니다.

  • NumPy 기반 Pandas 로딩 시간: 약 55.8초
  • PyArrow 기반 Pandas 로딩 시간: 약 11.8초

PyArrow는 동일 데이터를 5배 이상 빠르게 처리했습니다.

또한, Feather와 Parquet 포맷을 활용하면 저장 공간까지 절감할 수 있습니다.

  • 원본 CSV 크기: 2.2GB
  • Feather 포맷: 1.4GB
  • Parquet 포맷: 379MB

파일 크기를 줄이면서도 로딩 시간은 각각 10.6초(Feather), 9.1초(Parquet)로 더욱 빨라졌습니다. 이는 단순한 속도 향상이 아니라, 처리 시간과 메모리 효율을 동시에 개선한다는 의미입니다.


Pandas 3.0의 변화와 향후 방향

Pandas 3.0에서는 PyArrow가 필수 의존성으로 전환됩니다. 특히 문자열 처리 시 pyarrow.string이 기본 타입으로 지정되며, 향후 Pandas 내부 연산도 점차 PyArrow 기반으로 바뀔 예정입니다.

다만, Pandas 3.0에서 PyArrow는 아직 기본 엔진은 아닙니다. 공식적으로는 실험적 기능이며, 프로덕션 환경에서는 신중한 도입이 권장됩니다. 그럼에도 불구하고, PyArrow와의 통합은 명확한 방향성을 보여주고 있습니다.

Pandas를 그대로 유지하면서 백엔드만 교체하는 방식이기 때문에, API 변경 없이도 더 나은 성능을 누릴 수 있다는 점에서 부담도 적습니다.


728x90

Pandas는 오랜 기간 데이터 분석의 표준 도구로 활용돼 왔지만, 현대적인 데이터 처리 요구에는 다소 부족한 점이 있었습니다. 이번 Pandas 3.0의 변화는 단순한 버전 업데이트가 아니라, 아키텍처적 전환의 시작점이라 할 수 있습니다.

  • PyArrow는 열 중심 구조를 통해 대용량 데이터를 빠르게 처리
  • 압축 포맷과 병렬 처리로 메모리 및 속도 모두 개선
  • 기존 Pandas API는 그대로 유지되므로 마이그레이션 부담이 적음

지금 바로 모든 코드를 바꾸지는 않아도 됩니다. 하지만 앞으로의 데이터 분석 환경에서는 PyArrow가 새로운 표준이 될 가능성이 높습니다. 성능에 목마르다면 지금부터라도 실험적으로 적용해 보는 것이 좋습니다.

Pandas는 여전히 Pandas입니다. 다만, 그 속 엔진이 달라지고 있다는 것. 그 변화를 먼저 이해하고 준비하는 것이 데이터 분석가로서 한 발 앞서 나가는 길이 될 것입니다.

https://thenewstack.io/python-pandas-ditches-numpy-for-speedier-pyarrow/?utm_campaign=trueanthem&utm_medium=social&utm_source=facebook&fbclid=IwY2xjawKnYOtleHRuA2FlbQIxMQBicmlkETEzdTBFV1kyeE5rOU90NmJCAR6rS7lzDk87kcletkh1Tgt9xebGbOatAVE9iZoKOmjfJho_7yyti1Khj6RjRg_aem_9Hb9z1uED173L5HhcX6rVA

 

Python Pandas Ditches NumPy for Speedier PyArrow

Pandas 3.0 will significantly boost performance by replacing NumPy with PyArrow as its default engine, enabling faster loading and reading of columnar data.

thenewstack.io

728x90
반응형