Pandas 3.0이 기본 엔진으로 PyArrow를 도입하여 컬럼 기반 데이터의 읽기 및 로딩 성능을 대폭 향상시킨다. 이로 인해 데이터 분석 및 처리에 큰 변화를 가져올 전망이다.
Pandas 3.0은 기본 엔진을 NumPy에서 PyArrow로 변경해, 컬럼 기반 데이터의 로딩 및 읽기 속도를 크게 향상시킨다.
2025년 5월 27일, Joab Jackson
Python의 데이터 분석 라이브러리 Pandas가 곧 성능 강화라는 혜택을 얻게 된다. 오래 기다려온 3.0 버전에서는, 컬럼 기반 데이터의 로딩과 읽기를 위한 더 빠른 엔진이 도입된다. 지금까지 Pandas에서 수학 연산의 핵심 역할을 해온 NumPy 라이브러리 대신 PyArrow가 도입되는 것이다.
사실 Pandas는 이미 PyArrow를 지원하고 있으며, 이는 2023년 4월에 출시된 2버전 때부터 적용됐다. 하지만 3.0에서는 PyArrow가 필수 종속성으로 바뀌고, 문자열 데이터의 기본 타입 추론도 _pyarrow.string_
이 된다.
3.0에서도 NumPy를 계속 사용할 수 있지만, 굳이 그럴 필요는 없을 것이다.
파이썬 강사 Reuven Lerner는 최근 Pittsburgh에서 열린 PyCon 2025에서 ‘PyArrow 혁명’ 세션을 통해 다음과 같이 말했다.
“좋은 소식입니다. PyArrow는 10배 더 빠릅니다. 더 이상 뭐가 필요하신가요? 그냥 정말 말도 안 되게 빠릅니다.”
2008년 금융 퀀트 Wes McKinney가 만든 Pandas 라이브러리는 이제 대규모 데이터셋을 처리하는 표준 도구가 됐다. 이 라이브러리는 NumPy 위에 구축되어, 다양한 포맷의 대규모 배열 데이터를 효율적으로 저장할 수 있도록 해주었다.
Pandas의 Series는 본질적으로 1차원 NumPy 배열을 감싸는 래퍼 구조이며, DataFrame은 2차원 배열을 감싸는 구조다. C 언어로 작성되고 벡터화되어 있어, Pandas는 기본 Python 코드보다 훨씬 빠르고 효율적이다.
하지만 2005년 Numeric 라이브러리의 업데이트로 개발된 NumPy는, 데이터 스트리밍·중첩 행·복합 데이터 타입 등 최근 10년간 부각된 다양한 데이터 요구사항을 미처 반영하지 못했다. 날짜 처리에 약할 뿐만 아니라 압축 기능도 부족하고, 배치 처리에도 적합하지 않다.
무엇보다 컬럼 기반 데이터 처리에 느리다. 실제로 배열이란 대부분 컬럼 데이터인데, NumPy는 여전히 모든 데이터를 행(row) 단위로 저장한다. 따라서 배열 처리가 매우 느려지고, 접근할 때마다 매번 값을 찾아다녀야 한다. 또한 싱글스레드 방식이어서 계산이 모두 직렬로 진행되어 CPU 속도의 한계를 드러낸다.
PyArrow는 컬럼 기반 저장 방식을 제공해 NumPy의 비효율적 처리를 없앤다. PyArrow 덕분에 Pandas는 기본적으로 Copy on Write 모드를 활용할 수 있게 되며, 메모리 효율과 성능이 눈에 띄게 향상된다.
PyArrow는 Apache Arrow의 파이썬 바인딩이다. Apache Arrow 또한 McKinney가 개발한 것으로, 다양한 플랫폼에서 쓸 수 있는 컬럼 기반 메모리 포맷이다. 데이터를 컬럼 중심으로 저장해 디스크로의 저장이 쉽고 계산도 빠르다.
이러한 컬럼 지향 구조 덕분에, 오픈소스 데이터 처리 엔진(예: Spark, Flink, Dremio, Drill, Ray) 등에서 데이터 입출력이 획기적으로 빨라진다. AI 모델링 역시 컬럼 데이터 기반이 많아, TensorFlow나 PyCharm 같은 프레임워크와도 잘 어울린다.
Lerner는 NumPy의 메모리 처리 한계를 보여주는 예시로, 약 1,200만 행에 달하는 뉴욕시 2020년 주차 위반 CSV(2.2GB)를 들었다.
이 CSV 파일을 Python 메모리에 읽어들이는 데 NumPy는 55.8초가 걸렸지만, PyArrow로는 11.8초면 충분했다.
Arrow는 데이터 교환 속도를 높이기 위해 두 가지 이진 포맷도 제공한다. 하나는 [Feather](https://arrow.apache.org/docs/python/feather.html, 압축 없음)이고, 다른 하나는 [Parquet](https://thenewstack.io/an-introduction-to-apache-parquet/, 압축 적용)이다.
이 2.2GB짜리 CSV 파일은 Feather 변환 시 1.4GB, Parquet 변환 시 379MB로 줄었다. Arrow 포맷은 이진 데이터이기에 Pandas도 타입 판별에 소모되는 시간이 거의 없다.
성능도 크게 향상된다. Lerner의 테스트에 따르면, Feather로 읽을 땐 10.6초, Parquet로 읽으면 9.1초 만에 모든 데이터를 읽었다.
TNS와의 추가 이메일 인터뷰에서 Lerner는 Pandas 3.0에서 PyArrow가 필수 의존성이라고 밝혔다. 하지만 아직 3.0에서 기본 엔진이 바뀌게 되진 않는다.
“PyArrow가 점점 Pandas와 더 잘 통합되고 있지만, 아직 백엔드 기본값으로 쓰기엔 실험적 단계라 생산 환경에선 권장하지 않습니다. 그럼에도 PyArrow에서 보는 개선 효과는 굉장히 놀랍고 올바른 방향이라고 느낍니다.”
“그렇다면 PyArrow가 NumPy를 완전히 대체하느냐? 언젠가 그렇게 될 겁니다. 다만 정확히 언제인지는 모르고, Pandas 3.0에서는 아닙니다.”
Pandas 3.0의 공식 일정은 아직 확정되지 않았다. 2024년 4월 출시 예정이었으나 미뤄졌고, 최근 버전은 v2.23(2024년 9월 공개)이다.
이미 Pandas는 레거시 기술의 성격도 갖고 있어, PyArrow 내장이 데이터를 빠르게 처리해야 하는 조직들에겐 플랫폼 대이동 없이 성능 향상을 누릴 수 있는 좋은 소식이다.
Lerner는 “진짜 장점은 Pandas API는 그대로 쓰면서 백엔드만 새 것으로 바꿔 수많은 시간과 메모리를 절감하는 것”이라고 말했다.
2025년 5월 30일: Lerner의 추가 설명을 반영해 업데이트되었습니다.