BioPlayground

🧬
목록으로

CSV와 Excel 파일 다루기

pandas로 CSV와 Excel 파일을 읽고, 가공하고, 저장하는 기본 워크플로를 배웁니다.

입문
|
8
|
검증 완료 (2026-07)
CSVExcelpandas데이터 입출력파일 형식
진행률0/6 (0%)

CSV와 Excel 파일 다루기

이 토픽을 마치면

pandas로 CSV와 Excel 파일을 읽고 쓸 수 있으며, 실무에서 자주 만나는 인코딩, 시트 선택, 열 지정 문제를 해결할 수 있습니다.


CSV란 무엇인가

CSV(Comma-Separated Values)는 쉼표로 구분된 텍스트 파일입니다. 메모장으로 열어보면 이렇게 생겼습니다.

text
이름,나이,도시
김훈,30,서울
이수,25,부산
박진,35,대전

가장 보편적인 데이터 교환 형식입니다. 어떤 프로그래밍 언어, 어떤 운영체제에서든 읽을 수 있습니다. Excel, Google Sheets, 데이터베이스 — 모두 CSV 내보내기를 지원합니다.


CSV 읽기

python
import pandas as pd
# 기본 읽기
df = pd.read_csv("data.csv")
# 인코딩 지정 — 한글 깨짐 방지
df = pd.read_csv("data.csv", encoding="cp949")
# Windows Excel에서 저장한 한글 CSV는 cp949 (또는 euc-kr)
# UTF-8 BOM
df = pd.read_csv("data.csv", encoding="utf-8-sig")

한글 CSV를 읽을 때 UnicodeDecodeError가 나면 인코딩 문제입니다. 순서대로 시도합니다: utf-8utf-8-sigcp949euc-kr.


CSV 읽기 — 고급 옵션

python
# 특정 열만 읽기 — 메모리 절약
df = pd.read_csv("data.csv", usecols=["이름", "나이"])
# 구분자가 쉼표가 아닐 때
df = pd.read_csv("data.tsv", sep="\t") # 탭 구분
df = pd.read_csv("data.txt", sep="|") # 파이프 구분
# 헤더가 없는 파일
df = pd.read_csv("data.csv", header=None,
names=["col1", "col2", "col3"])
# 건너뛸 행 지정
df = pd.read_csv("data.csv", skiprows=2) # 상위 2행 건너뜀
# 큰 파일 — 청크 단위 읽기
for chunk in pd.read_csv("big.csv", chunksize=10000):
process(chunk) # 10,000행씩 처리

chunksize는 수백 MB 이상의 대용량 파일에서 메모리 부족을 방지합니다. 한 번에 전체를 메모리에 올리지 않고, 조각(chunk)씩 처리합니다.


Excel 읽기

python
# 기본 읽기 (첫 번째 시트)
df = pd.read_excel("report.xlsx")
# 특정 시트
df = pd.read_excel("report.xlsx", sheet_name="매출")
# 여러 시트 한 번에
sheets = pd.read_excel("report.xlsx", sheet_name=None)
# {'Sheet1': DataFrame, '매출': DataFrame, '비용': DataFrame}
for name, data in sheets.items():
print(f"{name}: {len(data)}행")
# 셀 범위 지정
df = pd.read_excel("report.xlsx",
usecols="B:E", # B~E열만
skiprows=3, # 상위 3행 건너뜀
nrows=100) # 100행만

Excel 읽기에는 openpyxl 패키지가 필요합니다 (pip install openpyxl).


파일 저장

python
# CSV로 저장
df.to_csv("output.csv", index=False, encoding="utf-8-sig")
# index=False: 행 번호 열 제외
# utf-8-sig: Excel에서 열어도 한글 깨지지 않음
# Excel로 저장
df.to_excel("output.xlsx", index=False, sheet_name="결과")
# 여러 시트에 저장
with pd.ExcelWriter("output.xlsx") as writer:
df_sales.to_excel(writer, sheet_name="매출", index=False)
df_cost.to_excel(writer, sheet_name="비용", index=False)

CSV 저장 시 encoding="utf-8-sig"를 쓰면, Windows Excel에서 열 때 한글이 깨지지 않습니다. utf-8로 저장하면 Excel에서 깨지는 경우가 많습니다.


실전 워크플로 — CSV 병합

여러 월별 CSV를 하나로 합치는 것은 매우 흔한 작업입니다.

python
import glob
# 폴더 안의 모든 CSV 찾기
files = glob.glob("monthly_data/*.csv")
print(f"{len(files)}개 파일 발견")
# 읽어서 합치기
dfs = []
for f in sorted(files):
temp = pd.read_csv(f, encoding="utf-8-sig")
temp["source_file"] = f # 원본 파일명 기록
dfs.append(temp)
df_all = pd.concat(dfs, ignore_index=True)
print(f"총 {len(df_all)}행")
# 결과 저장
df_all.to_csv("merged_all.csv", index=False, encoding="utf-8-sig")

ignore_index=True를 넣지 않으면 각 파일의 인덱스가 그대로 유지되어 0, 1, 2, ..., 0, 1, 2, ... 형태가 됩니다.


핵심 정리

CSV와 Excel은 데이터 분석의 입구와 출구입니다. 외부에서 데이터를 받으면 CSV/Excel이고, 결과를 전달할 때도 CSV/Excel인 경우가 대부분입니다. 인코딩(utf-8-sig vs cp949), 시트 선택, 열 지정 — 이 세 가지만 확실히 알면 "파일이 안 열려요" 문제의 90%를 해결할 수 있습니다.