HOWTO · Python

여러 CSV 파일을 Pandas로 가져오고 하나의 DataFrame으로 연결

이 튜토리얼은 Pandas를 사용하여 여러 CSV 파일을 가져오고 단일 DataFrame으로 연결하는 방법을 보여줍니다.

이 페이지의 내용

일치하는 각 CSV 파일을 pandas.read_csv()로 읽은 다음, 결과 DataFrame을 pd.concat()으로 결합합니다. 한 폴더에서 파일을 찾아 예측 가능한 순서로 읽고, 새 행 인덱스가 있는 하나의 DataFrame을 만듭니다. Python 환경에 pandas가 아직 없다면 먼저 설치하세요.

pandas로 CSV 파일 하나 읽기

pandas 패키지는 CSV 파일을 DataFrame으로 불러오는 read_csv() 함수를 제공합니다. 파일 하나를 읽으려면 df = pd.read_csv("sales.csv")를 호출하고, 파일 이름을 데이터 파일의 경로로 바꾸면 됩니다. 기본적으로 첫 번째 행을 열 이름으로 읽으므로, 결과 DataFrame의 열 이름을 확인해 파일이 의도한 대로 해석되었는지 살펴보세요. 여러 파일을 읽는 작업에서도 파일마다 같은 함수를 사용합니다.

glob으로 CSV 파일을 찾고 경로 만들기

Python 표준 라이브러리의 glob 모듈은 패턴과 일치하는 경로를 찾으므로 별도 패키지를 설치할 필요가 없습니다. glob.glob()은 일치하는 경로를 목록으로 반환합니다. 폴더 경로와 파일 이름 패턴을 os.path.join()으로 결합하면 Python이 운영체제에 맞는 구분자를 사용해 경로를 만듭니다.

pattern = os.path.join(folder, "*.csv")

*.csv 패턴은 지정한 폴더 바로 안에 있는 CSV 파일을 선택합니다. 하위 폴더까지 포함하려면 재귀 glob 패턴을 사용하고 glob.glob() 호출에 recursive=True를 설정하세요. Windows에서는 r"C:\data\sales"와 같은 원시 문자열을 사용하면 백슬래시가 이스케이프 시퀀스로 해석되지 않습니다. os.path.join()으로 이 폴더 경로에 파일 이름 패턴을 덧붙일 수 있습니다.

여러 CSV 파일을 읽고 DataFrame을 연결하기

일치하는 경로를 모은 뒤 각 경로마다 read_csv()를 한 번씩 호출하고, 결과 DataFrame을 pd.concat(..., ignore_index=True)에 전달합니다. 다음 전체 예제는 임시 폴더에 작은 CSV 파일 두 개를 만들므로 별도의 파일 없이 그대로 실행할 수 있습니다. 실제 데이터에 적용할 때는 예제 파일을 만드는 부분을 folder 경로로 바꾸고, 경로 찾기와 파일 읽기, 연결 단계는 그대로 사용하세요. 패턴과 일치하는 파일이 없으면 예제는 메시지를 출력하고 읽기와 연결을 건너뜁니다. 파일이 일치하면 마지막 출력문에 결합된 행이 표시됩니다.

import glob
import os
import tempfile
from pathlib import Path

import pandas as pd

with tempfile.TemporaryDirectory() as temp_dir:
    folder = Path(temp_dir)
    (folder / "jan.csv").write_text("month,sales\nJan,10\n", encoding="utf-8")
    (folder / "feb.csv").write_text("month,sales\nFeb,12\n", encoding="utf-8")

    pattern = os.path.join(str(folder), "*.csv")
    csv_paths = sorted(glob.glob(pattern))
    if not csv_paths:
        print("No CSV files found.")
    else:
        dataframes = [pd.read_csv(csv_path) for csv_path in csv_paths]
        combined = pd.concat(dataframes, ignore_index=True)
        print(combined.to_string(index=False))
month  sales
  Feb     12
  Jan     10

경로를 정렬하면 파일을 처리하는 순서가 일정해집니다. 행은 그 순서대로 배치되고, 각 파일 안에서는 원래 순서를 유지합니다. ignore_index=True를 지정하면 결합된 모든 행에 새 순차 인덱스가 부여됩니다. 파일마다 열 이름이 다르면 pandas는 열 이름을 기준으로 값을 맞추고, 값이 없는 곳에는 NaN을 채웁니다. 각 행이 같은 필드를 나타내야 한다면 열 이름을 일관되게 사용하세요. pd.concat()에는 최소 하나의 DataFrame이 필요하므로, 연결하기 전에 일치하는 파일이 있는지 확인하세요. 일치하는 파일이 없다면 읽기와 결합 단계를 실행하기 전에 폴더 경로나 패턴을 조정하세요.