일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- mysql
- isNotEmpty
- IntelliJ
- 404error
- 호이스팅
- pandas
- SQL
- docker
- oracle
- iBatis
- 리눅스
- 티스토리챌린지
- Python
- Linux
- springboot
- analytics4
- Kibana
- 명령어
- spring
- DBMS
- mssql
- java
- Javascript
- 자바
- pem
- github
- MariaDB
- git
- PostgreSQL
- 오블완
- Today
- Total
hanker
Python - 결측치 (Missing Value) 처리 방법 본문
데이터를 분석하기 전에 전처리(data preprocessing) 과정이 필수적이다.
데이터는 종종 누락(missing value), 이상치(outliers), 데이터 형식 불일치 등의 문제를 가지고 있으며, 이를 정리해야 정확한 분석과 머신러닝 모델 학습이 가능하다.
데이터에는 종종 비어 있는 값(결측 치, NaN)이 존재할 수 있다.
Pandas는 결측값을 쉽게 탐지하고 처리할 수 있는 다양한 함수를 제공한다.
이번 글에서는 Pandas를 활용한 결측치 처리 방법에 대해서 알아보자!
1. 결측치 확인
각 요소가 결측치인지 확인하여 불리언 series/DataFrame을 반환한다.
import pandas as pd
import numpy as np
df = pd.DataFrame({
'A': [1, 2, np.nan],
'B': [np.nan, 2, 3]
})
print(df.isnull())
print(df.notnull())
print(df.isnull().sum())
- notnull() / notna() : 결측치가 아닌 경우에 True를 반환한다.
- 각 열별 결측치 개수를 구할 때는 df.isnull().sum()을 사용한다.
2. 결측치 삭제
-dropna() : 결측치가 포함된 행이나 열을 제거할 수 있다.
import pandas as pd
import numpy as np
df = pd.DataFrame({
'A': [1, 2, np.nan],
'B': [np.nan, 2, 3]
})
print("################# 행 삭제")
df_drop_rows = df.dropna()
print(df_drop_rows)
print("################# 열 삭제")
df_drop_cols = df.dropna(axis=1)
print(df_drop_cols)
print("################# 부분 삭제")
df_thresh = df.dropna(thresh=2)
print(df_thresh)
3. 결측치 대체
-fillna() : 결측치를 특정 값이나 통계량(평균, 중앙값 등)으로 채울 수 있다.
import pandas as pd
import numpy as np
df = pd.DataFrame({
'A': [1, 2, np.nan],
'B': [np.nan, 2, 3]
})
print("################# 단순 대체 (0으로 채우기)")
df_filled = df.fillna(0)
print(df_filled)
print("################# 각 열마다 다른 값으로 채우기")
df_filled = df.fillna({'A': df['A'].mean(), 'B': 0})
print(df_filled)
print("################# inplace 옵션 사용 (원본 데이터프레임 직접 수정)")
df.fillna(0, inplace=True)
print(df)
4. 결측치 보간
- interpolate() : 선형 보간법 등 다양한 방법을 통해 결측치를 추정하여 채울 수 있다.
import pandas as pd
import numpy as np
df = pd.DataFrame({
'A': [1, 2, np.nan],
'B': [np.nan, 2, 3]
})
print("################# 결측치가 양쪽 값의 중간값으로 채워짐")
df_interpolated = df.interpolate()
print(df_interpolated)
print("################# 'linear', 'polynomial', 'time' 등을 method 인자로 지정할 수 있다.")
df_interpolated_poly = df.interpolate(method='polynomial', order=1)
print(df_interpolated_poly)
정리
결측치를 단순히 삭제하는 대신, 데이터 손실을 최소화하기 위해 적절한 값(평균, 중앙값, 혹은 다른 알고리즘으로 예측한 값)으로 대체할 수 있다.
문자열 데이터의 경우 결측치가 공백(" ")이나 특정 값으로 표기되는 경우도 있으므로, replace()나 str.strip() 등을 이용하여 미리 처리하는 것이 좋다.
각 방법의 장단점 고려
dropna()는 간단하지만 데이터 손실이 발생할 수 있다.
fillna()는 대체 값 선정이 중요하며, 분석 결과에 영향을 줄 수 있다.
interpolate()는 연속형 데이터에 유용하지만, 맨 처음이나 마지막 결측치는 보완되지 않을 수 있다.
'Python' 카테고리의 다른 글
Python - pandas 데이터 정렬하기 (sort_values() 옵션 파헤치기) (0) | 2025.02.28 |
---|---|
Python - pandas 데이터 타입 변환 (0) | 2025.02.26 |
Python - Pandas를 활용한 데이터 분석 (설치 및 사용법) (0) | 2025.02.16 |
Python - NumPy 연산 및 함수 활용 (0) | 2025.02.14 |
Python - NumPy 배열(ndarray) 다루기 (0) | 2025.02.11 |