안녕하세요.
오늘은 데이터 전처리 기본인 결측치를 파이썬으로 다루는 방법에 대해 알아보겠습니다.
※ 결측치(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 #옵션 수정 가능
※ 보간법이란?
- 알려진 데이터 지점의 고립점 내에서 새로운 데이터 지점을 구성하는 방식
'Programming > Python' 카테고리의 다른 글
[Python] 파일 리스트 가져오기 (os, glob) (1) | 2022.12.13 |
---|---|
[Python] 파이썬 문자열에서 숫자만 추출하기 (0) | 2022.12.01 |
[Python] 랜덤(Random) 모듈 (0) | 2022.10.11 |
[Python] PyDictionary 영어사전, 번역기 (2) | 2022.07.24 |
파이썬 네이버 종목토론방 크롤링 (3) | 2022.06.04 |
댓글