HOWTO · Pandas

Pandas에서 GZ 파일 읽기

이 글은 Pandas라는 Python 라이브러리를 사용하여 gz 파일을 읽는 방법을 보여줍니다.

이 페이지의 내용

pandas.read_csv()를 사용하면 gzip으로 압축된 CSV 파일을 DataFrame으로 바로 불러올 수 있습니다. .csv.gz 경로를 전달하고, 필요하면 compression="gzip"을 설정하세요. pandas는 파일 압축을 풀면서 CSV 내용을 구문 분석합니다. 아래 예제는 데이터 세트를 다운로드하지 않고도 실행할 수 있도록 작은 로컬 파일을 만듭니다. 예제를 수정할 때는 임시 경로를 실제 파일 경로로 바꾸세요.

pandas로 gzip 압축 CSV 읽기

.gz 확장자는 데이터 형식이 아니라 gzip 압축을 나타냅니다. gzip 파일에는 CSV 텍스트가 들어 있을 수도 있고, 다른 형식의 데이터가 들어 있을 수도 있습니다. 압축을 푼 내용이 쉼표로 구분된 텍스트일 때 read_csv를 사용하세요. 일반적인 경우 pandas는 .gz 확장자로 압축 형식을 추론할 수 있습니다. compression="gzip"을 지정하면 사용할 압축 형식을 명시할 수 있으며, 경로나 파일 객체만으로 압축 형식을 알 수 없을 때 유용합니다.

다음 예제를 실행해 보세요.
이 섹션의 코드와 표시되는 레이블 또는 출력은 영어로 유지됩니다.

import gzip
import tempfile
from pathlib import Path

import pandas as pd

with tempfile.TemporaryDirectory() as directory:
    csv_gz_path = Path(directory) / "sales.csv.gz"
    with gzip.open(csv_gz_path, "wt", encoding="utf-8", newline="") as file:
        file.write("item,quantity\nnotebook,3\npen,8\n")

    sales = pd.read_csv(csv_gz_path, compression="gzip")
    print(sales.head())

파일은 임시 디렉터리에 만들어지므로 같은 실행 과정에서 read_csv로 읽을 수 있습니다. 이 예제는 gzip 스트림 안에 UTF-8 텍스트를 저장하고, CSV에 헤더 행과 두 개의 데이터 행을 둡니다. 기존 파일을 사용할 때는 불러오기 줄을 그대로 두고 csv_gz_path를 실제 경로로 바꾸세요.

파일에 맞게 read_csv 설정하기

read_csv는 pandas DataFrame을 반환하며, 기본적으로 CSV 헤더를 열 이름으로 사용합니다. 예제의 compression="gzip"은 입력 파일의 압축을 푸는 방식을 지정합니다. pandas가 .gz 파일 이름에서 gzip을 추론할 수 있으면 이 설정은 생략해도 됩니다. 기본 구분자는 쉼표이므로 보통 sep=","도 필요하지 않습니다. 탭으로 구분된 파일에는 sep="\t"를 사용하세요.

기본값인 header="infer"는 첫 번째 행을 열 이름으로 처리하며, 이 파일에서는 header=0과 같습니다. 헤더 행이 없는 파일에는 header=None을 사용하고, 열 이름을 직접 지정하려면 names=[...]를 제공하세요. quotechar='"'는 CSV 구문 분석에서 기본으로 사용하는 따옴표 문자입니다. 따옴표로 묶인 필드 안에 쉼표가 있어도 별도의 열로 나뉘지 않으므로, 파일에서 다른 인용 규칙을 사용할 때만 quotechar를 바꾸세요.

절대 경로가 아니면 경로는 프로세스의 현재 작업 디렉터리를 기준으로 해석됩니다. 예제처럼 Path 객체를 입력 경로로 사용할 수 있으며 문자열 경로도 가능합니다. Windows 경로에는 r"C:\data\sales.csv.gz"와 같은 원시 문자열을 사용하거나, 역슬래시 이스케이프 문제를 피하도록 pathlib로 경로를 만드세요.

결과 DataFrame 확인하고 사용하기

변수 sales는 DataFrame이므로 열을 선택하고 행을 필터링하거나 다른 pandas 연산에 전달할 수 있습니다. sales.head()는 기본적으로 처음 다섯 행을 반환하고, sales.head(10)은 처음 10개 행을 반환합니다. 이를 통해 헤더가 열 이름으로 처리되었는지, 값이 예상한 열로 나뉘었는지 빠르게 확인할 수 있습니다. 구문 분석된 열 이름과 자료형을 살펴보려면 sales.columns와 sales.dtypes를 확인하세요.

표시되는 행은 불러온 파일과 pandas의 표시 설정에 따라 달라집니다. 실제 데이터 세트를 문서화할 때는 출력을 선택 가능한 텍스트로 제공하고, 큰 파일의 일부 미리 보기만으로 모든 행이 검증되었다고 판단하지 마세요.

형식 및 경로 문제 해결하기

Python에서 파일을 찾을 수 없다고 나오면 경로의 철자와 대소문자, 디렉터리를 확인한 다음 상대 경로의 기준이 되는 현재 작업 디렉터리를 확인하세요. 파일 객체를 사용하거나 파일 이름에 .gz 확장자가 없더라도 내용이 gzip으로 압축되어 있다면 compression="gzip"을 명시하세요. pandas가 압축 해제 오류를 보고하면 파일이 실제 gzip 데이터인지, 파일이 잘리지 않았는지 확인하세요.

압축은 풀렸지만 CSV 구문 분석에 실패하거나 열이 잘못 보이면 압축 해제된 내용을 살펴보고 그 형식에 맞게 구문 분석 옵션을 설정하세요. 흔한 원인으로는 CSV가 아닌 gzip 압축 파일에 read_csv를 사용하거나, 잘못된 구분자를 선택하거나, 헤더가 없는 파일의 첫 데이터 행을 열 이름으로 처리하는 경우가 있습니다. 따옴표로 묶인 필드에는 구분자가 들어갈 수 있습니다. quotechar를 올바르게 설정하면 구문 분석기가 해당 값을 하나의 필드로 유지합니다. gzip은 압축만 처리하며 다른 파일 형식을 CSV로 변환하지는 않습니다.