Python/Pandas

Pandas 결측치 처리 (isna(), fillna(), dropna())

임베디드 친구 2025. 10. 2. 20:01
반응형

Pandas 결측치 처리 (isna(), fillna(), dropna())

데이터 분석을 수행할 때 결측치는 흔히 발생하는 문제입니다. Pandas에서는 isna(), fillna(), dropna() 등의 함수를 활용하여 결측치를 탐색하고 적절히 처리할 수 있습니다. 이번 포스팅에서는 이러한 함수를 사용하여 결측치를 다루는 방법을 예제와 함께 살펴보겠습니다.

1. 결측치란?

결측치(Missing Value)는 데이터셋에서 누락된 값을 의미합니다. 결측치는 여러 가지 이유로 발생할 수 있으며, 결측치를 적절히 처리하지 않으면 데이터 분석 결과에 부정적인 영향을 미칠 수 있습니다. Pandas에서는 NaN(Not a Number) 값을 통해 결측치를 표현합니다.

2. 결측치 탐색 (isna(), isnull())

결측치를 탐색하기 위해 isna() 또는 isnull() 함수를 사용할 수 있습니다. 두 함수는 동일하게 동작하며, DataFrame에서 결측치를 찾아 Boolean 값을 반환합니다.

import pandas as pd
import numpy as np

# 예제 데이터 생성
data = {
    'Name': ['Alice', 'Bob', 'Charlie', 'David', 'Eve'],
    'Age': [25, np.nan, 30, 35, np.nan],
    'City': ['New York', 'Los Angeles', np.nan, 'Chicago', 'Houston']
}
df = pd.DataFrame(data)

# 결측치 확인
print(df.isna())  # True인 값이 결측치
print(df.isnull())  # 동일한 결과 반환

# 결측치 개수 확인
print(df.isna().sum())

출력 결과:

    Name    Age   City
0  False  False  False
1  False   True  False
2  False  False   True
3  False  False  False
4  False   True  False

Name    0
Age     2
City    1
dtype: int64

위 예제에서 isna().sum()을 사용하면 각 열(column)별 결측치 개수를 확인할 수 있습니다.

3. 결측치 처리

결측치를 처리하는 방법에는 여러 가지가 있습니다. 주요 방법은 다음과 같습니다:

  1. 결측치를 특정 값으로 대체 (fillna() 사용)
  2. 결측치가 포함된 행 또는 열 제거 (dropna() 사용)
  3. 결측치를 보간법(interpolation)으로 채우기

3.1. 결측치 채우기 (fillna())

fillna()를 사용하여 결측치를 특정 값으로 대체할 수 있습니다.

# 결측치를 특정 값으로 채우기
df_filled = df.fillna({'Age': df['Age'].median(), 'City': 'Unknown'})
print(df_filled)

출력 결과:

     Name   Age      City
0  Alice  25.0  New York
1    Bob  30.0  Los Angeles
2  Charlie  30.0  Unknown
3  David  35.0  Chicago
4    Eve  30.0  Houston
  • Age 열의 결측치는 중앙값(median)으로 대체
  • City 열의 결측치는 'Unknown'으로 대체

또한, 모든 결측치를 동일한 값으로 채울 수도 있습니다.

# 모든 결측치를 0으로 채우기
df.fillna(0)

3.2. 결측치 제거 (dropna())

dropna()를 사용하면 결측치가 포함된 행 또는 열을 제거할 수 있습니다.

# 결측치가 포함된 행 제거
df_dropped = df.dropna()
print(df_dropped)

출력 결과:

    Name   Age      City
0  Alice  25.0  New York
3  David  35.0  Chicago
  • Age 또는 City에 결측치가 포함된 행이 제거됨

특정 열에 결측치가 있는 경우에만 제거하고 싶다면 subset 매개변수를 사용할 수 있습니다.

# 특정 열의 결측치가 있는 행만 제거
df.dropna(subset=['Age'], inplace=True)

열(column)을 제거하려면 axis=1을 지정합니다.

# 결측치가 포함된 열 제거
df.dropna(axis=1)

3.3. 보간법을 이용한 결측치 처리 (interpolate())

보간법을 사용하여 결측치를 채울 수도 있습니다. interpolate()는 선형 보간(linear interpolation) 방법을 기본적으로 사용합니다.

# 선형 보간법 적용
df_interpolated = df.interpolate()
print(df_interpolated)

출력 결과:

     Name   Age      City
0  Alice  25.0  New York
1    Bob  27.5  Los Angeles
2  Charlie  30.0      NaN
3  David  35.0  Chicago
4    Eve  35.0  Houston
  • Age의 결측치는 이전 값과 이후 값의 평균으로 채워짐
  • City는 문자열이므로 보간되지 않음

4. 결측치 처리 전략 선택하기

결측치 처리 방법을 선택할 때는 데이터의 특성과 분석 목적을 고려해야 합니다.

  • 결측치가 많은 경우: 해당 열을 삭제하는 것이 좋음
  • 결측치가 적고 중요한 경우: 평균, 중앙값, 최빈값 등으로 채움
  • 시간에 따른 데이터: 보간법(interpolation) 활용
  • 범주형 데이터: fillna('Unknown') 또는 최빈값 사용

5. 결론

Pandas에서 결측치를 탐색하고 처리하는 방법을 살펴보았습니다. isna()를 사용하여 결측치를 확인하고, fillna(), dropna(), interpolate() 등을 활용하여 데이터를 정리할 수 있습니다. 데이터의 특성을 고려하여 적절한 방법을 선택하는 것이 중요합니다.

실제 분석 과정에서는 결측치가 데이터의 패턴에 미치는 영향을 신중히 검토한 후 처리 방법을 결정해야 합니다. 이번 포스팅이 결측치 처리에 대한 이해를 높이는 데 도움이 되었기를 바랍니다.

반응형