6.1.4 DataFrame (데이터프레임) 개요

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

수학적 의미: 이기종 차원을 허용하는 2차원 공간 행렬(Matrix)

2차원 행렬과 판다스 데이터프레임의 차이

수학의 2차원 행렬(Matrix)은 행과 열을 가지는 강력한 도구이지만, 오직 동일한 타입의 데이터(예: 숫자)만 담을 수 있다는 제약이 있습니다.

반면, 데이터프레임(DataFrame)은 수학 행렬의 장점에 관계 대수(Relational Algebra)의 데이터베이스 테이블 개념을 결합한 혁신적인 자료 구조입니다.

  • 각 열(Column)마다 완전히 독립적인 데이터 타입(예: 첫 번째 열은 문자열, 두 번째 열은 정수, 세 번째 열은 날짜)을 허용하는 이종 데이터 결합체로 동작합니다.
  • 단순한 숫자 좌표 대신 Column Name(열 이름)Row Index(행 이름표)로 직관적인 접근이 가능합니다.

비유로 이해하기: 시리즈(Series)들이 합쳐진 거대한 수납장

서랍장이 모여 수납장이 된 데이터프레임

1열짜리 서랍장인 Series(시리즈)의 개념을 정확히 이해했다면, 데이터프레임은 매우 쉽습니다!

  • 앞서 만든 1열짜리 서랍장(시리즈) 여러 개를 좌우로 나란히 밀착시켜 묶어놓은 거대한 수납장(Closet)이 바로 데이터프레임입니다.
  • 일상 생활에서 가장 흔하게 접하는 엑셀(Excel)의 워크시트 구조 그 자체를 파이썬 코드로 옮겨 놓은 형태입니다.
  • 즉, 데이터프레임 안에서 세로선 한 줄(Column)을 쑥 뽑아내면 그것이 바로 판다스의 Series가 됩니다.

[1단계] DataFrame의 3대 구성 요소

데이터프레임은 다음 세 가지 요소로 축조됩니다.

  1. Values (데이터값): 2차원 표의 각 칸(Cell)에 들어가는 실제 알맹이 값들.
  2. Index (인덱스/행 레이블): 엑셀 좌측에 적혀있는 1, 2, 3.. 행 번호에 해당하며, 각 가로줄(Row)을 식별하는 주소표입니다. (영업 데이터라면 날짜나 지점명이 될 수도 있습니다.)
  3. Columns (컬럼스/열 레이블): 엑셀 상단에 적혀있는 A, B, C.. 열 기호에 해당하며, 각 세로줄(Column) 데이터가 무엇인지 나타내는 특성 이름입니다.

데이터프레임 구조 애니메이션

(위 그림: Index가 세로 주소를, Columns가 가로 주제를, Values가 십자 크로스 지점별 실제 값을 나타냄)


[2단계] DataFrame 주요 기능과 맛보기

판다스의 데이터프레임을 사용하면 그동안 엑셀(스프레드시트) 프로그램에서 마우스로 클릭하고 스크롤하던 모든 반복 작업을 초고속 파이썬 코드로 대체할 수 있습니다!

주요 기능 (뭘 할 수 있나요?)

  • CSV, Excel, JSON, SQL 데이터베이스 등 이기종 소스에서 파일을 한 줄로 읽고 쓸 수 있다.
  • 엑셀의 VLOOKUP 기능을 압도하는 병합(Merge)과 조인(Join).
  • 데이터에 구멍 난 곳(결측치, NaN)을 자동으로 무시하거나 평균값 등으로 스마트하게 채워 넣기.
  • 데이터를 맘대로 잘라보고(Slicing), 조건에 맞는 줄만 뽑아보기(Filtering).
  • 부서별, 연도별 등으로 데이터를 그룹화(GroupBy)하여 평균과 합계 내기.

🪄 [실습 1] DataFrame 간단하게 만들기

딕셔너리(Dictionary) 구조를 활용해 파이썬에서 바로 데이터프레임을 생성해 봅시다.

import pandas as pd

# 1. 원시 데이터 딕셔너리 준비 (Series들이 뭉쳐질 재료)
# {열 이름 : 리스트 데이터} 형태로 구성합니다.
raw_data = {
    "이름": ["Alice", "Bob", "Charlie", "Diana"],
    "나이": [25, 30, 35, 28],
    "직업": ["개발자", "디자이너", "기획자", "데이터분석가"],
    "연봉": [5000, 4800, 5200, 4500]
}

# 2. DataFrame 조립! 
# (행을 지칭할 Index를 문자열 'a', 'b', 'c', 'd'로 명시할 수도 있음)
df = pd.DataFrame(data=raw_data, index=['a', 'b', 'c', 'd'])

print("🏢 판다스 DataFrame 구성 완료:\n")
print(df)

print("\n--- 내부 구조 3종 세트 ---")
print("1) 열 목록(columns):", df.columns.tolist())
print("2) 행 주소(index):", df.index.tolist())
print("3) 순수 값(values):\n", df.values)

[실행 결과]

🏢 판다스 DataFrame 구성 완료:

        이름  나이      직업    연봉
a    Alice  25     개발자  5000
b      Bob  30    디자이너  4800
c  Charlie  35     기획자  5200
d    Diana  28  데이터분석가  4500

--- 내부 구조 3종 세트 ---
1) 열 목록(columns): ['이름', '나이', '직업', '연봉']
2) 행 주소(index): ['a', 'b', 'c', 'd']
3) 순수 값(values):
 [['Alice' 25 '개발자' 5000]
 ['Bob' 30 '디자이너' 4800]
 ['Charlie' 35 '기획자' 5200]
 ['Diana' 28 '데이터분석가' 4500]]

딕셔너리 조립을 통한 DataFrame 생성 과정

핵심 요약: DataFrame은 열(columns), 행(index), 그리고 이들이 품고 있는 2차원 데이터(values) 테이블 자체를 그대로 본뜬 ‘코드계의 엑셀’입니다.

서브목차