본문 바로가기
Programming/Python

[Python] 파이썬 결측치 조회, 처리

by 코딩하는 금융인 2022. 10. 13.

안녕하세요.

오늘은 데이터 전처리 기본인 결측치를 파이썬으로 다루는 방법에 대해 알아보겠습니다.

 

 

※ 결측치(NA, Null 등) 처리하는 방법은 다른 툴에서도 다뤄봤으니 관심 있으시면 아래 글들을 찾아보시기 바랍니다.

2021.07.29 - [Programming & Data Analysis/SQL] - [SQL] null 처리하기 (조회, 대체)

2022.08.07 - [Programming & Data Analysis/R] - [R] 데이터 전처리, 결측치

 

 파이썬 결측치 다루기

▣ import 패키지

import pandas as pd
import seaborn as sns
import numpy as np

 

▣ 예제 데이터

seaborn :: penguins.head(10)

species island bill_length_mm bill_depth_mm flipper_length_mm body_mass_g sex
Adelie Torgersen 39.1 18.7 181.0 3750.0 Male
Adelie Torgersen 39.5 17.4 186.0 3800.0 Female
Adelie Torgersen 40.3 18.0 195.0 3250.0 Female
Adelie Torgersen NaN NaN NaN NaN NaN
Adelie Torgersen 36.7 19.3 193.0 3450.0 Female
Adelie Torgersen 39.3 20.6 190.0 3650.0 Male
Adelie Torgersen 38.9 17.8 181.0 3625.0 Female
Adelie Torgersen 39.2 19.6 195.0 4675.0 Male
Adelie Torgersen 34.1 18.1 193.0 3475.0 NaN
Adelie Torgersen 42.0 20.2 190.0 4250.0 NaN

- seaborn 패키지에 내장되어 있는 펭귄 데이터 (7 columns & 344 rows) 

 

▣ 결측치 조회 & 확인

penguins = sns.load_dataset('penguins')
penguins.info()

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 344 entries, 0 to 343
Data columns (total 7 columns):
 #   Column             Non-Null Count  Dtype  
---  ------             --------------  -----  
 0   species            344 non-null    object 
 1   island             344 non-null    object 
 2   bill_length_mm     342 non-null    float64
 3   bill_depth_mm      342 non-null    float64
 4   flipper_length_mm  342 non-null    float64
 5   body_mass_g        342 non-null    float64
 6   sex                333 non-null    object 
dtypes: float64(4), object(3)
memory usage: 18.9+ KB

- bill_length_mm, bill_depth_mm, flipper_length_mm, body_mass_g, sex 열에 결측치가 존재함

 

: columns별로 결측치 개수 확인하기

penguins.isnull().sum()
#####
species               0
island                0
bill_length_mm        2
bill_depth_mm         2
flipper_length_mm     2
body_mass_g           2
sex                  11
dtype: int64

 

: columns별로 결측치 아닌 개수 확인하기

penguins.notnull().sum()
#####
species              344
island               344
bill_length_mm       342
bill_depth_mm        342
flipper_length_mm    342
body_mass_g          342
sex                  333
dtype: int64
반응형

▣ 결측치 제거

: 결측치 존재 행 제거

penguins.dropna(axis = 0)

 

: 결측치 존재 열 제거

penguins.dropna(axis = 1)

 

- dropna는 옵션이 여러 가지가 있는 위처럼 axis로 결측값이 있는 행과 열을 제거할 수 있고 thresh = n으로 결측치가 n개 이상 변수를 드랍할 수 있음

- 또한, subset = ['column name']을 통해 해당 열의 결측치 행을 제거할 수 있음

 

▣ 결측치 대체

: fillna()으로 결측치 대체하기

penguins['bill_length_mm'].fillna(penguins['bill_length_mm'].mean()) # 평균으로 대체

- 평균뿐만 아니라 분위수, 최빈값 등 여러 가지 산술식으로 대체할 수 있다 (연속형 변수)

 

: 보간법으로 대체하기 (연속형)

penguins.interpolate() #default는 linear #옵션 수정 가능

※ 보간법이란?

- 알려진 데이터 지점의 고립점 내에서 새로운 데이터 지점을 구성하는 방식

반응형

댓글