HOWTO · Pandas

Parquet 파일을 Pandas DataFrame으로 읽기

이 튜토리얼은 Python에서 Parquet 파일을 pandas DataFrame으로 읽는 방법을 보여줍니다.

이 페이지의 내용

Parquet 파일을 pandas DataFrame 으로 로드하려면 pandas와 호환되는 Parquet 엔진을 설치한 다음 pandas.read_parquet() 를 호출합니다. 아래 예제는 PyArrow를 사용하며, 작은 DataFrame을 임시 파일에 쓰고 다시 읽어옵니다.

Parquet 파일

Parquet은 표 형식 데이터를 위한 열 지향 파일 형식입니다. 값을 열 단위로 저장하고 스키마와 압축 정보를 포함할 수 있어 분석용 데이터셋에 흔히 사용됩니다. CSV는 텍스트 기반의 행 형식입니다. 두 형식은 서로 다른 장단점을 가지며, 어느 쪽도 보편적으로 더 빠르거나 효율적이지 않습니다. 읽어들이는 데이터의 양과 선택한 엔진은 데이터셋을 로드할 때 수행되는 작업에 영향을 줄 수 있습니다.

Parquet은 테이블과 같은 구조화된 데이터를 위한 것이며, 동영상, 오디오, 이미지 파일을 담는 범용 컨테이너를 목적으로 하지 않습니다. Parquet 파일에는 다른 곳에 저장된 미디어를 참조하는 값을 가진 열이 포함될 수 있지만, 미디어 자체는 이 표 형식의 목적이 아닙니다.

Parquet 파일을 Pandas DataFrame으로 읽기

프로그램을 실행하는 Python 환경에 python -m pip install pandas pyarrow 로 pandas와 PyArrow를 설치하세요. pandas가 파일을 처리하려면 지원되는 Parquet 엔진이 필요합니다. 이 예제는 PyArrow를 명시적으로 선택합니다. 엔진은 설치되어 있어야 하며, 사용할 수 있는 옵션은 pandas 환경에 따라 다를 수 있습니다. pandas에서 흔히 사용되는 또 다른 엔진은 fastparquet 입니다. 환경에 맞는 경우에만 설치하고 선택하세요.

이미 파일이 있다면 pd.read_parquet(path, engine="pyarrow") 를 사용하세요. path 는 로컬 파일이나 지원되는 원격 소스를 지정할 수 있습니다. 이 함수는 pandas DataFrame 을 반환합니다. 기존 데이터셋의 경우, 선택한 엔진과 소스가 해당 작업을 지원할 때 columns=[...] 를 설정해 특정 열을 요청할 수 있습니다. 전체 함수 시그니처와 허용되는 옵션은 pandas 버전과 엔진에 따라 달라질 수 있으므로, 추가 인수에 의존하기 전에 프로젝트에 설치된 버전의 문서를 확인하세요.

로컬 파일의 경우 상대 경로는 프로그램의 현재 작업 디렉터리를 기준으로 해석됩니다. 스크립트가 다른 디렉터리에서 실행될 수 있다면 절대 경로를 사용하세요. 원격 스토어에서 읽을 때는 소스가 선택한 엔진에서 지원되어야 하며, 필요한 자격 증명이나 스토리지 구성을 프로세스가 사용할 수 있어야 합니다. 반환되는 DataFrame에는 파일에서 디코딩된 열과 행이 포함되며, 데이터 타입은 저장된 스키마와 리더가 지원하는 타입 매핑에 따라 결정됩니다. 나중 분석을 위해 어떤 값에 다른 pandas 타입이 필요하다면, 로드한 뒤에 해당 열을 변환하세요.

다음 예제는 로컬 Parquet 왕복을 시도하기 전에 PyArrow가 있는지 확인합니다. 샘플 DataFrame은 항상 출력되며, PyArrow가 설치되어 있으면 임시 Parquet 파일을 쓰고 읽기도 합니다. 전체 왕복을 실행하려면 활성 환경에 pandas와 PyArrow를 설치하세요.

from importlib.util import find_spec
from pathlib import Path
from tempfile import TemporaryDirectory
import pandas as pd

students = pd.DataFrame(
    {
        "student": ["Alia", "Zoya", "Ali"],
        "marks": [20, 10, 22],
    }
)

if find_spec("pyarrow") is None:
    print("PyArrow is not installed; displaying the sample DataFrame only.")
    print(students.to_string(index=False))
else:
    with TemporaryDirectory() as directory:
        parquet_path = Path(directory) / "students.parquet"
        students.to_parquet(parquet_path, engine="pyarrow", index=False)
        loaded = pd.read_parquet(parquet_path, engine="pyarrow")
        print(loaded.to_string(index=False))

이 예제를 확인하는 데 사용한 환경에서는 PyArrow를 사용할 수 없으므로, 코드는 그 제한을 알리고 Parquet 파일을 읽었다고 주장하는 대신 메모리에 있는 샘플을 표시합니다. PyArrow를 설치하면 같은 코드가 왕복을 수행하고 로드된 행을 표시합니다.

PyArrow is not installed; displaying the sample DataFrame only.
student  marks
   Alia     20
   Zoya     10
    Ali     22

프로젝트에 있는 파일에 대해서는 parquet_path 를 해당 경로로 바꾸고, 엔진은 환경에 설치된 패키지와 일관되게 유지하세요. 설치된 엔진이 다르다면 read_parquet() 에서 그 엔진을 선택하고 지원되는 옵션을 확인하세요. 로드한 뒤에는 분석을 계속하기 전에 loaded.head() 로 빠르게 미리 보거나 loaded.dtypes 로 추론된 열 타입을 확인하세요.