1. 결측치란 무엇인가요?
결측치의 정의
- 결측치(Missing Value): 데이터셋에서 값이 누락된 경우를 말합니다.
- 결측치를 제대로 처리하지 않으면 분석 결과의 신뢰성이 크게 떨어질 수 있습니다.
2. 결측치 탐지
결측치 탐지 방법
Pandas를 활용하면 데이터프레임에서 결측치를 쉽게 탐지할 수 있습니다.
1) isna() / isnull() 함수
데이터프레임의 각 요소가 결측치인지 여부를 반환합니다.
isna()
- 사용 방법: 데이터프레임에서 .isna()를 붙이면 끝!
- 결과: 결측치(True)와 아닌 값(False)을 확인할 수 있습니다.
import pandas as pd
# 데이터 준비
data = {
'이름': ['철수', '영희', '민수', '지수'],
'나이': [25, 30, None, 35],
'직업': ['학생', '회사원', '학생', None]
}
df = pd.DataFrame(data)
# 결측치 탐지
print(df.isna())
출력:
이름 나이 직업
0 False False False
1 False False False
2 False True False
3 False False True
2) sum()함수와 조합
열별 결측치 개수를 확인.
isna().sum()
- 사용 방법: .isna() 뒤에 .sum()을 붙이면 됩니다.
- 결과: 각 열의 결측치 개수를 알려줍니다.
print(df.isna().sum())
출력:
이름 0
나이 1
직업 1
dtype: int64
3. 결측치 처리 방법
방법 1: 제거 (Dropping)
1) 결측치가 포함된 행 삭제
dropna(): 결측치가 포함된 행을 삭제합니다.
df_dropped_rows = df.dropna()
print(df_dropped_rows)
결과:
이름 나이 직업
0 철수 25.0 학생
1 영희 30.0 회사원
2) 결측치가 포함된 열 삭제
dropna(axis=1): 결측치가 포함된 열을 삭제합니다.
df_dropped_columns = df.dropna(axis=1)
print(df_dropped_columns)
결과:
이름
0 철수
1 영희
2 민수
3 지수
방법 2: 대체 (Filling)
1) 고정 값으로 대체
fillna(값): 결측치를 지정된 값으로 채웁니다.
df_filled = df.fillna('미정')
print(df_filled)
결과:
이름 나이 직업
0 철수 25.0 학생
1 영희 30.0 회사원
2 민수 미정 학생
3 지수 35.0 미정
1) 통계적 값으로 대체
결측치를 평균, 중앙값, 최빈값 등으로 대체
평균: .fillna(df['열'].mean())
중앙값: .fillna(df['열'].median())
최빈값: .fillna(df['열'].mode()[0])
# 평균값으로 대체
df['나이'].fillna(df['나이'].mean(), inplace=True)
# 중앙값으로 대체
df['나이'].fillna(df['나이'].median(), inplace=True)
# 최빈값으로 대체
df['직업'].fillna(df['직업'].mode()[0], inplace=True)
방법 3: 보간법 (Interpolation)
결측치 주변 값을 참고해 자동으로 계산합니다.
- 선형 보간법: interpolate(method='linear')
선형 보간법 적용
df['나이'] = df['나이'].interpolate(method='linear')
print(df)
결과:
이름 나이 직업
0 철수 25.0 학생
1 영희 30.0 회사원
2 민수 32.5 학생
3 지수 35.0 NaN
방법 4: 사용자 정의 함수 적용
def fill_with_default(value):
return value if pd.notna(value) else '기본값'
df['직업'] = df['직업'].apply(fill_with_default)
print(df)
결과:
이름 나이 직업
0 철수 25.0 학생
1 영희 30.0 회사원
2 민수 32.5 학생
3 지수 35.0 기본값
4. 결측치 처리 전략
결측치를 처리하기 전 고려할 점
- 결측치 비율 확인
- 결측치 비율이 높으면 제거를 고려.
- 데이터 특성 고려
- 연속형 데이터: 평균, 중앙값 대체.
- 범주형 데이터: 최빈값 또는 고정값 대체.
- 데이터 검증
- 결측치를 처리한 후 데이터의 일관성을 반드시 검증.
- 분석 목표
- 결측치가 중요한 데이터에 포함되어 있다면 보관법이나 머신러닝 기법을 우선 고려
주요 메서드 요약
메서드 | 설명 | 사용 예시 |
isna() | 결측치를 True/False로 탐지 | df.isna() |
isna().sum() | 각 열의 결측치 개수를 계산 | df.isna().sum() |
dropna() | 결측치 포함 행 삭제 | df.dropna() |
dropna(axis=1) | 결측치 포함 열 삭제 | df.dropna(axis=1) |
fillna(값) | 결측치를 특정 값으로 대체 | df.fillna('미정') |
fillna(mean()) | 평균값으로 대체 | df['나이'].fillna(df['나이'].mean()) |
interpolate() | 보간법으로 결측치 채우기 | df['나이'].interpolate(method='linear') |
'Python' 카테고리의 다른 글
데이터 전처리: 데이터 정규화와 표준화 (0) | 2024.12.03 |
---|---|
데이터 전처리: 이상치 탐지 및 처리 (0) | 2024.12.03 |
4.2.4 연습 문제: 각 자리 숫자의 합을 구하는 함수(리스트를 이용) (0) | 2024.11.29 |
4.2.3 연습 문제: 회문 판별 함수 만들기 (2) | 2024.11.29 |
4.2.2 슬라이싱 (0) | 2024.11.29 |