결측치 탐지
Pandas 에서 결측치를 탐지하는 기본적인 함수는 isnull() 과 notnull() 이다.
- isnull() : 결측치가 있는지 확인. 결측치인 경우 True , 아닌경우 False 를 반환
- notnull() : 결측치가 아닌 값을 확인. 결측치가 아닌 경우 True , 맞는경우 False 를 반환
- null 과 na 를 변경해 isna() , notna() 로 표현도 가능
- 예시
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
Tip
True 는 1이고 False 는 0 인걸 활용하여 보통 sum() 함수와 같이 사용해 결측치의 개수를 편하게 확인한다.
- 예시
# 각 열별 결측치 개수 확인
print(df.isna().sum())
- 결과
이름 0
나이 1
직업 1
dtype: int64
결측치 처리
결측치 제거 - dropna()
- 결측치가 포함된 행이나 열을 삭제
- axis = 옵션을 사용해 행 or 열 을 선택
# 결측치가 있는 행 삭제
df_dropped = df.dropna()
print(df_dropped)
# 결측치가 있는 열 삭제
df_dropped_columns = df.dropna(axis=1)
print(df_dropped_columns)
결측치 대체 (채우기) - fillna()
- 결측치를 특정 값으로 대체 할 수 있다
- 평균, 중앙값, 최빈값 등으로 대체를 한다.
# 결측치를 0으로 채우기
df_filled = df.fillna(0)
print(df_filled)
# 결측치를 각 컬럼의 평균값으로 채우기
df_filled_mean = df.fillna(df.mean())
print(df_filled_mean)
결측치 보간 - interpolate()
- 결측치를 주변 값들을 기반으로 보간 한다
- 연속적인 데이터에서 유효, 값 간의 관계가 선형적이거나 일정한 패턴을 따를때 유용
- 시계열 데이터와 같이 일정한 시간 간격으로 수집된 데이터에서 주로 사용
- 예시
# 예시 데이터프레임 생성
data = {
'날짜': pd.date_range('2023-01-01', periods=5),
'온도': [20, 22, None, 24, 25]
}
df2 = pd.DataFrame(data)
# 선형 보간법으로 결측치 채우기
df2['온도'] = df2['온도'].interpolate()
print(df2)
-결과
날짜 온도
0 2023-01-01 20.0
1 2023-01-02 22.0
2 2023-01-03 23.0
3 2023-01-04 24.0
4 2023-01-05 25.0
고급 결측치 처리 방법
특정 조건을 기반으로 처리
- 특정 조건으로 결측치를 처리
- 예를들어 다른열의 값을 기준으로 결측치를 채움
- 예시
# '직업'이 '학생'인 경우 '나이'를 20으로 채우기
df.loc[(df['직업'] == '학생') & (df['나이'].isna()), '나이'] = 20
print(df)
- 결과
이름 나이 직업
0 철수 25.0 학생
1 영희 30.0 회사원
2 민수 20.0 학생
3 지수 35.0 없음
apply() 함수를 사용한 결측치 처리
- apply() 함수를 사용해 사용자 정의함수로 결측치를 처리 가능
# 예시: '나이'가 결측치일 경우, 기본값으로 18을 채우는 함수
def fill_missing_age(x):
if pd.isna(x):
return 18
return x
df['나이'] = df['나이'].apply(fill_missing_age)
print(df)
- 결과
이름 나이 직업
0 철수 25.0 학생
1 영희 30.0 회사원
2 민수 20.0 학생
3 지수 35.0 없음
'Python > Pandas' 카테고리의 다른 글
[Pandas] 데이터 정규화 와 표준화 (0) | 2024.12.26 |
---|---|
[Pandas] 이상치 탐지와 처리 (1) | 2024.12.26 |
[Pandas] 피벗 테이블 - pivot_table() (4) | 2024.12.16 |
[Pandas] 그룹화 및 집계함수 (1) | 2024.12.16 |
[Pandas] 데이터 병합 - merge(), concat(), join() (1) | 2024.12.16 |