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. 결측치 처리
결측치를 처리하는 방법에는 여러 가지가 있습니다. 주요 방법은 다음과 같습니다:
- 결측치를 특정 값으로 대체 (
fillna()
사용) - 결측치가 포함된 행 또는 열 제거 (
dropna()
사용) - 결측치를 보간법(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()
등을 활용하여 데이터를 정리할 수 있습니다. 데이터의 특성을 고려하여 적절한 방법을 선택하는 것이 중요합니다.
실제 분석 과정에서는 결측치가 데이터의 패턴에 미치는 영향을 신중히 검토한 후 처리 방법을 결정해야 합니다. 이번 포스팅이 결측치 처리에 대한 이해를 높이는 데 도움이 되었기를 바랍니다.
'Python > Pandas' 카테고리의 다른 글
Pandas 데이터 미리보기: head(), tail(), info(), describe() (0) | 2025.10.01 |
---|---|
웹에서 데이터 불러오기 (Pandas) (0) | 2025.09.30 |
Pandas SQL 파일 포맷 다루기 (0) | 2025.09.29 |
JSON 파일 포맷 다루기 (0) | 2025.09.28 |
Pandas로 Excel 파일 다루기 (0) | 2025.09.27 |