6.5.1 외부 데이터 파일 불러오기와 내보내기 (I/O)

💾 [실습 파일 다운로드] 본 강의의 전체 실습 코드를 직접 실행해 볼 수 있는 주피터 노트북 파일입니다. 아래 링크를 클릭하여 다운로드 후 VS Code에서 열어보세요.

🧮 전산학적/수학적 의미: 직렬화와 역직렬화 (Serialization & Deserialization)

판다스의 DataFrame 객체는 컴퓨터의 휘발성 주 메모리(RAM) 위에서만 존재하는 2차원 자료 구조입니다. 이 데이터를 영구적인 보조 기억 장치(하드디스크)에 텍스트나 바이너리 형태로 포맷팅하여 저장하는 것을 내보내기(Serialization, Write)라 하고, 반대로 포맷팅된 파일을 읽어와 메모리상의 2차원 객체로 복원하는 것을 불러오기(Deserialization, Read)라 합니다.

데이터 직렬화/역직렬화 전산학적 도식

🏷️ 비유로 이해하기: 작업대(메모리)와 창고(하드디스크)

  • read_ 시리즈: 창고에 예쁘게 포장되어 있는 상자(CSV, Excel 파일)를 꺼내서, 연구원의 책상(메모리) 위에 쫙 펼쳐놓는 작업입니다.
  • to_ 시리즈: 책상 위에서 온갖 수학 연산과 정제 작업이 끝난 데이터 표를 잃어버리지 않게 예쁜 상자에 담아서 창고에 다시 영구 보관하는 작업입니다.

연구원의 작업대와 창고 비유 도식


🪄 [실습 1] 엑셀(.xlsx) 파일 불러오기: read_excel()

VS Code나 주피터 노트북을 열고 pandas_01.py 파일을 생성하여 단계별로 실습을 진행합니다.

1단계: 엑셀 파일 가져오기

현업에서 가장 친숙한 엑셀 파일을 그대로 파이썬 작업대로 불러옵니다. read_로 시작하는 다양한 함수가 있으며, data/ 폴더에 위치한 유명한 타이타닉 탑승객 데이터를 가져와 보겠습니다.

import pandas as pd

# 창고(data/ 경로)에서 엑셀 파일을 읽어와 df_excel 변수에 저장(할당)합니다.
df_excel = pd.read_excel("data/titanic.xlsx")

# head() 함수로 앞의 5줄만 제대로 가져왔는지 검수합니다.
print("--- 🚢 타이타닉 엑셀 데이터 불러오기 ---")
print(df_excel.head())

[출력 결과]

--- 🚢 타이타닉 엑셀 데이터 불러오기 ---
   pclass  survived                                             name     sex  ...
0       1         1                    Allen, Miss. Elisabeth Walton  female  ...
1       1         1                   Allison, Master. Hudson Trevor    male  ...
2       1         0                     Allison, Miss. Helen Loraine  female  ...
3       1         0             Allison, Mr. Hudson Joshua Creighton    male  ...
4       1         0  Allison, Mrs. Hudson J C (Bessie Waldo Daniels)  female  ...

2단계: 데이터프레임 구조 스캔

데이터를 처음 올려놓고 나면, 앞선 6.4.1 장에서 배운 기초 건강검진(info())을 바로 수행해 구조를 파악하는 것이 좋습니다.

print("\n--- 🩺 데이터프레임 정보 스캔 ---")
df_excel.info()

[출력 결과]

--- 🩺 데이터프레임 정보 스캔 ---
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 1309 entries, 0 to 1308
Data columns (total 14 columns):
...
dtypes: float64(2), int64(4), object(8)
memory usage: 143.3+ KB

출력 결과를 통해 1309명의 승객 정보와 14개의 다양한 특성(Name, Age, Survived 등)을 지닌 대규모 데이터인 것을 파악할 수 있습니다.


🪄 [실습 2] CSV 파일로 저장하기: to_csv()

작성한 코드 아래에 다음 코드를 추가합니다.

1단계: CSV 포맷으로 하드디스크에 저장

CSV (Comma Separated Values) 형식은 데이터가 쉼표(,)로 구분된 매우 단순하고 가벼운 텍스트 파일입니다. 엑셀의 복잡한 서식(색상, 테두리 등)이 없기 때문에 수천만 건의 데이터를 다룰 때 사실상의 표준 프레임워크로 사용됩니다.

책상 위에 있던 데이터를 분석하기 용이한 CSV 포맷으로 하드디스크에 저장해 봅니다.

# 현재 메모리에 있는 표 형식을 CSV 파일 상자로 포장해서 창고에 넣습니다.
# (index=False 를 주지 않으면 불필요한 번호 0, 1, 2... 열이 하나 더 추가되어 저장되니 주의하세요!)
df_excel.to_csv("data/titanic_processed.csv", index=False)

print("--- 💾 CSV 저장 완료 ('data/titanic_processed.csv') ---")

[출력 결과]

--- 💾 CSV 저장 완료 ('data/titanic_processed.csv') ---

🪄 [실습 3] 저장된 CSV 파일을 다시 불러오기: read_csv()

새로운 실습을 위해 pandas_02.py 파일을 생성합니다.

1단계: CSV 파일 불러오기

방금 저장했던 가벼운 CSV 파일을 다시 파이썬 메모리로 불러올 수 있습니다. 엑셀 함수 대신 read_csv를 사용합니다.

import pandas as pd

# 방금 저장한 따끈따끈한 csv 파일을 다시 불러옵니다.
tt_csv = pd.read_csv("data/titanic_processed.csv")

# 엑셀에서 불러온 것과 완벽히 동일한 구조인지 처음 8줄을 확인합니다.
print("--- 📦 새로 저장한 CSV 데이터 불러오기 ---")
print(tt_csv.head(8))

[출력 결과]

--- 📦 새로 저장한 CSV 데이터 불러오기 ---
   pclass  survived                                             name     sex  ...
0       1         1                    Allen, Miss. Elisabeth Walton  female  ...
1       1         1                   Allison, Master. Hudson Trevor    male  ...
2       1         0                     Allison, Miss. Helen Loraine  female  ...
3       1         0             Allison, Mr. Hudson Joshua Creighton    male  ...
4       1         0  Allison, Mrs. Hudson J C (Bessie Waldo Daniels)  female  ...
5       1         1                                Anderson, Mr. Harry    male  ...
6       1         1                  Andrews, Miss. Kornelia Theodosia  female  ...
7       1         0                                Andrews, Mr. Thomas    male  ...

📌 핵심 팁 요약

  • 데이터를 파이썬 안으로 가져오고 싶을 때: pd.read_형식("경로")
  • 파이썬에서 다 끝난 데이터를 밖으로 빼내 저장할 때: df.to_형식("경로")
  • 판다스는 이밖에도 JSON (.read_json), SQL DB (.read_sql), Parquet 시스템과도 호환되는 강력한 입출력 엔진을 지원합니다.
서브목차