< * 판다스에서 결측(미싱값) 처리하기 *>
◆ Pandas에서 결측값(미싱값)을 처리하는 방법은 매우 다양하며, 데이터의 상황에 따라 적절한 방식으로 처리해야 한다.
1. 결측값 확인
◎ df.isnull(): 각 값이 결측값인지 여부를 확인하는 DataFrame을 반환한다.
◎ df.notnull(): 결측값이 아닌 데이터 여부를 확인하는 DataFrame을 반환한다.
◎ df.isnull().sum(): 각 열에 존재하는 결측값의 개수를 확인할 수 있다.
_____<예시>____________________________________________________________________
import pandas as pd
# 예제 데이터 생성
data = {'Name': ['Tom', 'Nick', 'John', None],
'Age': [20, 21, None, 23],
'Score': [85.5, None, 77.5, 91]}
df = pd.DataFrame(data)
# 결측값 확인
print(df.isnull())
print(df.isnull().sum())
-------------------------------------------------------------------------------------------
2. 결측값 삭제
◎ df.dropna(): 결측값이 있는 행 또는 열을 삭제한다.
◎ axis=0: 결측값이 있는 행을 삭제 (기본값).
◎ axis=1: 결측값이 있는 열을 삭제.
◎ how='any': 하나라도 결측값이 있으면 삭제 (기본값).
◎ how='all': 모든 값이 결측값일 때만 삭제.4
_____<예시>____________________________________________________________________
# 결측값이 있는 행을 삭제
df_cleaned = df.dropna()
# 결측값이 있는 열을 삭제
df_cleaned_col = df.dropna(axis=1)
-------------------------------------------------------------------------------------------
3. 결측값 채우기
◎ df.fillna(value): 결측값을 지정한 값으로 채운다.
◎ method='ffill': 결측값을 앞의 값으로 채움 (forward fill).
◎ method='bfill': 결측값을 뒤의 값으로 채움 (backward fill).
◎ inplace=True: 원본 DataFrame을 수정.
_____<예시>____________________________________________________________________
# 결측값을 0으로 채우기
df_filled = df.fillna(0)
4. 특정 열의 결측값 채우기
특정 열만 선택해서 결측값을 처리할 수도 있다.
_____<예시>____________________________________________________________________
# 'Age' 열의 결측값을 평균으로 채우기
df['Age'] = df['Age'].fillna(df['Age'].mean())
5. 결측값이 포함된 행 또는 열을 필터링
결측값이 포함된 행 또는 열만 따로 필터링해서 확인할 수도 있다.
_____<예시>____________________________________________________________________
# 결측값이 포함된 행만 따로 추출
df_with_na = df[df.isnull().any(axis=1)]
# 결측값이 없는 행만 추출
df_without_na = df[df.notnull().all(axis=1)]
-------------------------------------------------------------------------------------------
6. 결측값 대체 전략 선택
데이터에 따라 적절한 결측값 대체 전략을 선택할 수 있다.
◎ 평균값으로 채우기: df.fillna(df.mean())
◎ 중간값으로 채우기: df.fillna(df.median())
◎ 최빈값으로 채우기: df.fillna(df.mode().iloc[0])
_____<예시>____________________________________________________________________
# 'Age' 열의 결측값을 중간값으로 채우기
df['Age'] = df['Age'].fillna(df['Age'].median())
7. 결측값 대체 후의 데이터 검증
결측값을 채우거나 제거한 후 데이터의 정확성을 검증하기 위해 다시 한 번 결측값 여부를 확인하는 것이 좋다.
_____________________________________________
# 결측값이 더 이상 없는지 확인
print(df.isnull().sum())
--------------------------------------------------