[판다스 4화] CSV와 엑셀 파일 읽기 및 저장하기(read_csv, read_excel) 활용법 정리 | Python Pandas | 빅분기, 빅데이터분석기사 실기

공공데이터 포털에서 다운로드한 파일이나 기업 내부 데이터베이스에서 추출한 자료를 다룰 때, 가장 먼저 접하는 데이터 포맷은 대개 CSV와 엑셀(Excel) 파일입니다. 파이썬(Python) 기반 데이터 분석 라이브러리인 판다스(Pandas)는 이러한 외부 파일을 효율적으로 불러오고 저장할 수 있는 다양한 함수를 제공합니다.

이번 글에서는 판다스의 핵심 파일 입출력 함수인 read_csv, read_excel, to_csv, to_excel의 사용법을 살펴보고, 현업 비즈니스 환경과 빅데이터분석기사(빅분기) 실기 시험에서 빈번하게 발생하는 인코딩 오류 및 인덱스 누적 문제를 해결하는 방법을 정리하겠습니다.

1. 외부 데이터 입출력의 기초: read_csv와 to_csv

1.1. CSV 파일 읽기 (read_csv)

CSV(Comma-Separated Values)는 쉼표로 데이터를 구분한 텍스트 파일로, 용량이 작고 호환성이 높아 데이터 분석에서 자주 사용됩니다. 판다스에서는 pd.read_csv() 함수를 사용하여 2차원 데이터프레임 구조로 변환할 수 있습니다.

import pandas as pd

# 로컬 환경의 CSV 파일 불러오기
df_csv = pd.read_csv('customer_orders.csv')

비즈니스 현업에서 파일의 경로가 작업 디렉토리 내부가 아니라면 절대 경로(C:/data/customer_orders.csv)나 상대 경로(../data/customer_orders.csv)를 정확하게 지정해야 파일을 정상적으로 로드할 수 있습니다.

1.2. CSV 파일 저장하기 (to_csv)

데이터프레임으로 변환된 데이터를 가공한 후 다시 파일로 내보낼 때는 to_csv() 메서드를 활용합니다.

Python

# 가공된 데이터프레임을 CSV 파일로 저장
df_csv.to_csv('processed_orders.csv', index=False)

중요 설정 파라미터: index=False 판다스는 데이터프레임을 저장할 때 기본적으로 행 인덱스(0, 1, 2…)를 파일에 함께 기록합니다. 이 상태로 저장한 파일을 다시 읽어 들이면 기존 인덱스가 ‘Unnamed: 0’이라는 불필요한 컬럼으로 중복 생성되는 현상이 일어납니다. 정돈된 데이터 관리를 위해 특별한 목적이 없다면 index=False 옵션을 추가하는 방식을 권장합니다.

2. 비즈니스 업무 효율화를 위한 read_excel과 to_excel

2.1. 엑셀 파일 읽기 (read_excel)

기업 환경에서 가장 널리 쓰이는 표 형태의 데이터는 .xlsx 또는 .xls 확장자를 가진 엑셀 파일입니다. 판다스에서는 pd.read_excel() 함수를 제공하여 이를 손쉽게 처리할 수 있습니다. 해당 기능을 안정적으로 사용하기 위해서는 내부적으로 엑셀 파일을 파싱하는 openpyxl 라이브러리가 환경에 설치되어 있어야 합니다.

Python

# 특정 시트의 데이터 불러오기
df_excel = pd.read_excel('sales_report.xlsx', sheet_name='2026_매출')
  • sheet_name: 엑셀 파일 내에 여러 시트가 존재할 때, 데이터가 포함된 특정 시트의 이름을 문자열로 지정하거나 인덱스 번호(0부터 시작)를 입력하여 원하는 데이터만 선별적으로 가져올 수 있습니다. 지정하지 않으면 첫 번째 시트를 기본적으로 로드합니다.

2.2. 엑셀 파일 저장하기 (to_excel)

분석 및 전처리가 완료된 데이터프레임을 엑셀 파일로 생성할 때는 to_excel() 메서드를 사용합니다.

Python

# 정제된 데이터를 엑셀로 내보내기
df_excel.to_excel('final_report.xlsx', sheet_name='정제데이터', index=False)

CSV 파일과 마찬가지로 행 인덱스가 새로 컬럼으로 추가되는 현상을 막기 위해 index=False 옵션을 지정하는 것이 일반적입니다.

3. 실무와 시험에서 발생하는 주요 문제점 및 예외 처리

외부 데이터를 시스템에 가져올 때 코드가 멈추거나 데이터가 깨지는 현상이 자주 발생합니다. 대표적인 사례와 해결 방안을 알아보겠습니다.

3.1. 한국어 깨짐 현상과 인코딩(Encoding) 오류 해결

Windows에서 저장된 일부 CSV 파일은 기본 인코딩 형식 차이로 인해 데이터를 읽을 때 UnicodeDecodeError가 발생할 수 있습니다. 파이썬 판다스는 기본적으로 utf-8 인코딩을 기준으로 작동하기 때문입니다.

이러한 오류가 발생한다면 read_csv 함수 내부에 encoding 파라미터를 추가하여 문서 형식을 명시해야 합니다.

Python

# Windows 엑셀 기반 CSV 파일 로드 시 인코딩 설정
df_korean = pd.read_csv('korean_data.csv', encoding='cp949') 
# 또는 encoding='euc-kr' 시도

3.2. 구분자가 쉼표가 아닌 경우 (Delimiter 처리)

종종 탭(\t)이나 세미콜론(;), 혹은 공백으로 항목이 구분된 파일이 존재합니다. 이때는 sep 파라미터를 사용하여 파일 구조에 맞게 설정해야 데이터가 한 컬럼에 뭉쳐서 나오는 현상을 방지할 수 있습니다.

Python

# 탭으로 구분된 TSV 파일 읽기
df_tab = pd.read_csv('data_tab.txt', sep='\t')

4. 빅데이터분석기사 실기 시험 환경에서의 유의사항

빅데이터분석기사 실기 시험 작업형 제2유형과 제3유형을 풀이할 때도 외부 데이터를 다루는 흐름이 일관되게 적용됩니다. 시험장 환경에서는 출제 기관이 지정한 경로의 데이터를 읽어 와 분석 모델을 생성한 후, 최종 예측 결과를 규정된 파일명(예: result.csv)으로 내보내는 작업이 요구됩니다.

Python

# 1. 시험 환경 데이터 로드
X_train = pd.read_csv('data/X_train.csv')
y_train = pd.read_csv('data/y_train.csv')

# ... [데이터 전처리 및 머신러닝 모델링 수행] ...

# 2. 결과 제출 파일 생성 (인덱스 제외 필수)
submission = pd.DataFrame({'pred': 수험번호별_예측값})
submission.to_csv('result.csv', index=False)

만약 채점 서버가 결과를 판독할 때 index=False 설정을 빠뜨려 행 인덱스가 파일에 포함된다면 컬럼 수가 일치하지 않아 감점 요인이 되거나 오답으로 처리될 가능성이 있습니다. 따라서 시험을 진행할 때는 제출용 파일 저장 시 인덱스 플래그를 누락하지 않는 연습을 반복하는 것이 유리합니다.

5. 요약 및 다음 화 안내

  • read_csv / read_excel: 외부 저장소의 텍스트 또는 스프레드시트 데이터를 데이터프레임으로 수집하는 기능을 수행합니다.
  • to_csv / to_excel: 가공이 완료된 데이터를 로컬 드라이브에 저장하며, 재사용을 위해 index=False 파라미터 지정을 권장합니다.
  • 인코딩 문제: 한글 깨짐 및 열림 오류가 발견되면 encoding='cp949' 옵션으로 보정이 가능합니다.

다음 [판다스 5화]에서는 데이터를 메모리에 정상적으로 올린 뒤 본격적인 탐색을 수행하기 위한 첫걸음으로, DataFrame 구조 이해하기: 컬럼, 인덱스, 데이터 타입 한눈에 보기에 대해 상세하게 알아보겠습니다. 데이터의 내재적 특성을 파악하여 분석 방향을 설계하는 방법을 마스터해 봅시다.

댓글 남기기