본문 바로가기
Python_Wiki/Python_Syntax

결측치 제거, 개수 확인

by yj-data 2025. 6. 5.

결측치 관리

결측치 처리방법: 결측치의 유형 및 비율에 따라 적절한 결측치 처리 방법을 결정해야함

제거: 결측치가 발생한 행, 열을 삭제. 가장 쉽고 단순한 방식.
- 결측치를 제거하면 결측치가 없는 완벽한 데이터셋을 만들 수 있지만, 결측치가 포함된 데이터가 모두 삭제되어 데이터 크기에 손실이 발생
- 경우에 따라 결측치를 무시하고 관측치만으로 분석을 시행할 경우, 통계적 편향이 생길 가능성이 생김

치환: 결측치를 적당한 방법으로 대체하는 것
- 데이터의 특성에 맞게 적당한 평균, 중앙값, 최빈값으로 대체 가능하나, 평균값 등으로 단순 대체하는 방법은 자료의 편향성을 높이고, 특성들 간의 상관 관계를 왜곡할 수 있음
- 데이터에 대한 도메인 지식이 있어야 효율적으로, 정확히 결측치 대체 가능

모델기반처리: 결측치를 예측하는 새로운 모델을 구성해, 결측치를 채워나가는 방식
- 변수의 특성에 따라 Knn, PolyRegression 등의 방법을 활용해 모델에 알맞게 결측치를 제거하거나 대체하는 방법

 

결측치 해결

제거: 결측치 비율이 매우 낮을때 제거해도 무방

치환: 결측치 비율이 너무 높아서 다 제거할 경우 데이터 결과가 왜곡될경우. 

  • 치환 기준은 각기 나름이지만
    • 같은 분야의 논문을 여러개 참조할 수 있음
    • 다른 '신뢰할 수 있는' 소스에 기반하여 선택하는 것도 방법
    • 치환을 어떤 값으로 할건지는 도메인에 따라 다를 수 있음. 도메인 지식이 중요한 이유 중 하나.

.fillna()

# .fillna( ) : 결측치를 특정 값으로 채우거나 대체하여 처리
#데이터 전체의 결측값을 측정값으로 변경
df.fillna(대치할 값)
#특정 컬럼의 결측값을 특정 값으로 변경
df[col_name].fillna(대치할값)
#결측값을 바로 위의 값과 동일하게 변경
#df.fillna(method='ffill') #ffill 대신 bfill쓰면 아래 값과 동일하게 변경

#how to use
disney['director'] = disney['director'].fillna('No Data')
#평균값으로 변경
df1['Age'] = df1['Age'].fillna(round((df1['Age'].mean())))

 

.replace()

# .replace(np.nan, 'b') : 결측치를 문자열 바꾸기 함수를 통해 처리
# 원본 객체를 변경: inplace = True 옵션 추가
# don't(no more) : 
# df['column_name'].replace(np.nan, 'input_value', inplace = True)
# do:
disney['director'] = disney['director'].replace(np.nan, 'No Data')
disney.replace({'director':'No Data'}, inplace=True)

 

.dropna() ==  .dropna(axis = 0) 

# .dropna(axis = 0) : 결측치가 있는 행 전체 제거
df.dropna(axis=0, how='any', subset=None)
#df.dropna(axis=1) #결측값이 들어 있는 열 전체 삭제
#how : {'any' : 존재하면 제거 / 'all' : 모두 결측치면 제거}
#subset : 행/열의 이름을 지정합니다.
#df.dropna(subset=['Cabin','Age'])

 

 

결측치 확인, 결측치 개수확인

 

.info()

# .info() : 데이터에 대한 전반적인 정보 제공
df.info()

 

.isna(): 결측값True, 외에는 False 반환   <=> .notna(): 결측값False, 외에는 True 반환

passenger["Age"].isna()[0:7]
<=>
ages = passenger[passenger["Age"].notna()]

 

 

.isnull().sum() == .isna().sum()

# 각 컬럼별 결측치 개수 반환
# .isnull() == .isna() : 결측 값은 True 반환, 그 외에는 False 반환하며 데이터프레임 내에 결측 값을 확인하기 위해 사용
df.isnull().sum()
df.isna().sum()

#특정렬에서 확인
df[df['Age'].isna()]

'Python_Wiki > Python_Syntax' 카테고리의 다른 글

in, not in  (0) 2025.07.08
문자열: 제일 왼쪽 빈칸 하나 없애기(.lstrip())  (0) 2025.06.05
예외 처리 / try - except  (0) 2025.05.29
함수function, 매개변수  (0) 2025.05.28
제어문: 반복문  (3) 2025.05.28