카테고리 없음

[기술 블로그 06] Pandas로 결측값 처리하기

quiet-ocean 2026. 5. 24. 12:47

<목차>

1. 결측값과 문자열 데이터 이해하기

2. 결측값 확인 및 삭제 방법

3. 결측값 채우기와 데이터 전처리


오늘은 결측값을 처리하는 코드 위주로 소개해 볼 예정이다. 

1. 결측값과 문자열 데이터 이해하기

결측값은 0, ' '과는 다른 개념으로 데이터 자체가 없다는 것이다. (같다는 개념도 없음!)

처음부터 값이 없는 데이터를 불러오거나 데이터를 처리하는 과정에서 값이 빠질 때 결측값이 생길 수 있다. 

특히 문자열 데이터에서는 단순한 빈칸뿐 아니라 "unknown", "none", "N/A" 같은 문자열도 실제 결측값처럼 사용되는 경우가 많다.


● 특정 문자열을 결측값으로 처리하기

df = pd.read_csv(
    "data.csv",
    na_values=["unknown", "none", "N/A"]
)

print(df)

 

2. 결측값 확인 및 삭제 방법

결측값을 처리하기 전에 먼저 데이터 안에 결측값이 얼마나 존재하는지 확인해야 하는데, 
isna()와 sum() 함수를 이용해 쉽게 확인할 수 있다.

 

● 결측값 여부 확인

print(df.isna())

 

  count() 함수로 데이터 개수 확인하기

결측값을 제외한 실제 데이터의 개수 확인할 떄 사용한다. 

print(df.count())

 

  컬럼별 결측값 개수 확인

print(df.isna().sum())

 

  전체 결측값 개수 확인

print(df.isna().sum().sum())

 

  결측값이 있는 행 삭제

결측값이 포함된 행을 삭제할 때는 dropna()를 사용.

df2 = df.dropna()

 

  특정 컬럼 기준으로 삭제

df3 = df.dropna(subset=["Age"])

 

  결측값이 너무 많은 행만 삭제

df4 = df.dropna(thresh=2)

 

3. 결측값 채우기 & 데이터 전처리

● 숫자형 데이터 평균값으로 채우기

df["Age"] = df["Age"].fillna(df["Age"].mean())

 

  문자열 데이터 특정 값으로 채우기

df["Name"] = df["Name"].fillna("Unknown")

 

  최빈값으로 채우기

mode_value = df["City"].mode()[0]

df["City"] = df["City"].fillna(mode_value)

 

  앞의 값으로 채우기

df = df.fillna(method="ffill")

 

  뒤의 값으로 채우기

df = df.fillna(method="bfill")

 

  여러 컬럼 한 번에 결측값 처리하기

각각 다른 방식으로 결측값을 채우고 싶을 때는 fillna()에 딕셔너리 형태로 값을 지정 가능

import pandas as pd
import numpy as np

df = pd.DataFrame({
    "Name": ["Tom", np.nan, "Jane"],
    "Age": [20, np.nan, 22],
    "City": ["Seoul", np.nan, "Busan"]
})

df.fillna({
    "Name": "Unknown",
    "Age": df["Age"].mean(),
    "City": "Seoul"
}, inplace=True)

이런식으로!!

 


결측값 처리는 데이터 분석의 정확도를 높이는 중요한 과정이니까 잘 기억하고 있어야겠다!!!