Processor

【Pandas】 결측(미싱값) 처리하기

작성자 임베디드코리아 작성일26-04-16 00:22 조회102회 댓글0건
< * 판다스에서 결측(미싱값) 처리하기 *>
◆ 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)

# 결측값을 열의 평균으로 채우기
df_filled_mean = df.fillna(df.mean())

# 결측값을 앞의 값으로 채우기 (forward fill)
df_ffill = df.fillna(method='ffill')

# 결측값을 뒤의 값으로 채우기 (backward fill)
df_bfill = df.fillna(method='bfill')
------------------------------------------------------------------------------------------


4. 특정 열의 결측값 채우기
  특정 열만 선택해서 결측값을 처리할 수도 있다.
_____<예시>____________________________________________________________________
# 'Age' 열의 결측값을 평균으로 채우기
df['Age'] = df['Age'].fillna(df['Age'].mean())

# 'Score' 열의 결측값을 특정 값으로 채우기
df['Score'] = df['Score'].fillna(50)
------------------------------------------------------------------------------------------


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())

# 'Score' 열의 결측값을 최빈값으로 채우기
df['Score'] = df['Score'].fillna(df['Score'].mode().iloc[0])
------------------------------------------------------------------------------------------


7. 결측값 대체 후의 데이터 검증
  결측값을 채우거나 제거한 후 데이터의 정확성을 검증하기 위해 다시 한 번 결측값 여부를 확인하는 것이 좋다.
_____________________________________________
# 결측값이 더 이상 없는지 확인
print(df.isnull().sum())
--------------------------------------------------