콘텐츠로 이동

03. Pandas: 엑셀을 코드로 다루기

"데이터 분석의 8할은 청소(Preprocessing)입니다. Pandas는 최고의 청소 도구입니다."

NumPy가 기계(CPU)를 위한 도구라면, Pandas는 사람(Analyst)을 위한 도구입니다.

NumPy의 행렬 데이터 [[10, 20], [30, 40]]은 컴퓨터에겐 명확하지만, 사람에겐 "그래서 10이 가격이야? 나이야?"라는 의문을 남깁니다. Pandas는 이 삭막한 행렬에 '이름표(Label)'를 붙여줍니다.

1. Series와 DataFrame의 관계

Pandas에는 두 가지 핵심 부품이 있습니다. 마치 레고 블록과 같습니다.

  • Series (시리즈): 데이터가 한 줄로 된 것. (1차원)
  • DataFrame (데이터프레임): Series가 여러 개 모여서 표(Table)가 된 것. (2차원)

Series는 곧 '컬럼'이다

엑셀에서 '세로 한 줄'을 뜯어내면 그것이 바로 Series입니다.

graph LR
    subgraph DF["DataFrame (표)"]
        direction LR
        Col1["Name<br>(Series)"]
        Col2["Age<br>(Series)"]
        Col3["Score<br>(Series)"]
        Col1 --- Col2 --- Col3
    end
    style DF fill:#e8f5e9,stroke:#2e7d32
    style Col1 fill:#fff3e0,stroke:#e65100
    style Col2 fill:#fff3e0,stroke:#e65100
    style Col3 fill:#fff3e0,stroke:#e65100
# 이것은 '리스트'처럼 보이지만 'Series'입니다.
# index(번호표)가 자동으로 붙습니다.
ages = pd.Series([20, 22, 21]) 

2. DataFrame: 파워풀한 엑셀

Pandas의 핵심은 DataFrame입니다. 쉽게 말해 "프로그래밍 가능한 엑셀 시트"입니다.

  • 행(Row) 인덱스: 데이터의 번호표 (예: 1번 손님, 2번 손님...)
  • 열(Column) 이름: 데이터의 속성 (예: 이름, 나이, 키...)
  • 데이터(Values): 실제 알맹이는 NumPy Array로 되어 있어 엄청 빠릅니다.
graph TD
    subgraph Pandas["Pandas DataFrame"]
        direction TB
        Cols["Column Names (이름표)<br>['Name', 'Age', 'Score']"]
        Idx["Index (번호표)<br>[0, 1, 2]"]
        Data["NumPy Array (실제 데이터)<br>[[ 'Kim', 20, 95 ],<br> [ 'Lee', 22, 88 ],<br> [ 'Park', 21, 92 ]]"]

        Cols --- Data
        Idx --- Data
    end
    style Pandas fill:#e8f5e9,stroke:#2e7d32
    style Data fill:#e1f5fe,stroke:#01579b
    style Cols fill:#fff3e0,stroke:#e65100
    style Idx fill:#fff3e0,stroke:#e65100

3. 코드 예시: 엑셀을 코드로

엑셀 파일을 더블 클릭해서 여는 대신, 코드 한 줄로 불러와서 분석합니다.

import pandas as pd

# 1. 데이터 만들기 (딕셔너리 활용)
data = {
    "Name": ["아이언맨", "토르", "헐크"],
    "Strength": [100, 500, 1000],
    "Intelligent": [500, 50, 100]
}

# 2. DataFrame 생성 (엑셀 시트 만들기)
df = pd.DataFrame(data)

# 3. 데이터 분석
print(df)
# 결과: 표 형태로 출력됨

print(df["Strength"].mean()) 
# 결과: 533.33 (힘의 평균을 순식간에 계산)

4. 전처리 (Preprocessing): 더러운 데이터 청소하기

현실의 데이터는 교과서처럼 깔끔하지 않습니다. 구멍(NULL)이 뚫려있고, 오타가 있고, 이상한 값이 섞여 있습니다. AI에게 먹이기 전에 이 데이터를 깨끗하게 씻겨야 합니다.

  • 결측치(NaN) 처리: 비어있는 값을 평균값으로 채우거나 삭제합니다.
  • 필터링: "힘(Strength)이 500 이상인 영웅만 뽑아줘" 같은 조건을 겁니다.
# 힘이 200보다 센 영웅만 뽑기
strong_heroes = df[ df["Strength"] > 200 ]
print(strong_heroes)
# 토르, 헐크만 출력됨

설계자의 시선: Garbage In, Garbage Out

컴퓨터 공학의 절대 법칙입니다. "쓰레기가 들어가면 쓰레기가 나온다."

아무리 최신 AI 모델(GPT-4 등)을 가져와도, 학습시킬 데이터가 엉망이라면 결과도 엉망입니다. 데이터 사이언티스트는 모델을 만드는 시간보다, Pandas로 데이터를 닦고 조이는(Preprocessing) 시간에 80%를 씁니다. Pandas가 중요한 이유입니다.


이제 데이터를 모으고(Pandas), 숫자로 바꿔서(NumPy) 준비를 마쳤습니다. 드디어 이 데이터를 AI의 두뇌인 신경망으로 보낼 차례입니다. 마지막 관문, Tensor로 이동합니다.