Python Library - Pandas(5)

에이블·2022년 2월 14일
0

파이썬

목록 보기
17/20

본 게시물은 코드프레소의 code.PRESS-UP 체험단 과정을 담은 게시물입니다.

해당 게시물 수강강좌 :

파이썬으로 배우는 데이터 분석 : Pandas

Pandas 라이브러리로 데이터 분석 시작하기

https://www.codepresso.kr/course/56

이번 포스팅은 지난 포스팅에 이어서 결측값을 처리하는 방법에 대해 알아봅시다.
결측치에 대한 내용은 저도 코드프레소 강의를 통해 처음 알게 되었습니다.

1. 결측치 유무 확인

dataframe.info()
dataframe.isnull()
dataframe.isnull().sum()

1-1. info()

dataframe.info()

📌 각 컬럼 별 non-null 값의 개수를 출력함
📌 전체 행의개수에서 non-null의 개수를 빼면 나머지가 결측치의 개수가 됨

1-2. isnull()

dataframe.isnull()

📌 DataFrame 내 모든 데이터에서 NaN 값을 찾아 True/False로 반환
📌 isna() 메소드와 동일한 기능을 수행

1-3. isnull().sum()

📌 컬럼 별 결측 값의 개수를 확인할 수 있음
📌 isnull()의 결과를 모두 더한 값
📌 sum() 메소드의 인자에 axis = 1을 추가하면 각 행 별 결측값의 개수 확인 가능

# axis = 1을 추가하면 각 행 별 결측값의 개수를 확인 할 수 있음
dataframe.isnull().sum(axis = 1)
dataframe.isnull().sum()

# 비슷한 메소드로 다음이 있다.
isnull().value_counts() 

2. 결측치를 찾아 처리

2-1. dropna()

📌 NaN 값이 하나라도 포함된 행 데이터를 조회 및 제거해주는 함수
📌 나머지 데이터를 DataFrame으로 반환

#Parameters
how = 'all' : 모든 행 데이터의 값이 NaN인 경우만 찾아서 제거
inplace = True : 원본 데이터에 적용
axis = 'columns' : dropna() 메소드가 열을 기준으로 동작
# 행의 결측치가 2개 초과인 행만 삭제
dataframe = dataframe.dropna(thresh = 2)

# 특정열 모두가 결측치일 경우 해당 행 삭제
datafraem = dataframe.dropna(subset = ['col1', 'col2', 'col3'], how =  'all')

# 특정열에 1개 초과의 결측치가 있을 경우 해당 행 삭제
dataframe = dataframe.dropna(subset =['col1', 'col2', 'col3], thresh = 1)

2-2. fillna(value)

📌 결측치를 다른 값으로 대체
📌 value에 대체할 값을 입력
📌 value 값의 형식은 단일값, 딕셔너리, Series, 또는 DataFrame 등등
📌 value에 딕셔너리 객체 전달시 컬럼별 대체할 값을 다르게 설정 가능
📌 mean(), median(),mode() 등의 집계함수를 이용한 대표 값으로 결측값 대체 가능
📌 원본을 변경하기 위해서는 inplace = True 지정 필요
📌 replace(), interpolate()라는 비슷한 메소드가 존재한다.

replace_set = {'col2' : 0, 'col4' : '100'}
dataframe.fillna(replace_set)
dataframe.fillna(0)

# 특정열에 결측치가 있을 경우 다른 값으로 대체하기
dataframe['col'].fillna(0)

# 컬럼의 평군으로 대체 하기
dataframe['col'] = dataframe['col'].fillna(df['col'].mean())

# 결측치 바로 이전 값으로 채우기
dataframe.fillna(method = 'pad')

# 결측치 바로 이후 값으로 채우기
dataframe.fillna(method = 'bfill')

# 결측치 값을 -50으로 채운다
dataframe.replace(to_replace = np.nan, value = -50)

# 인덱스를 무시하고 값들을 선형적으로 같은 간격으로 처리한다
dataframe.interpolate(method = 'linear', limit_direction = 'forward')

2-3. 예측모델(Prediction model)

📌 예측 기법을 사용한 결측치 추정은 결측치들의 특성이 패턴을 가진다고 가정후 진행
📌 결측값이 없는 컬럼들로 구성된 dataset으로 결측값이 있는 컬럼을 예측한다.
📌 회귀 분석 기술을 활용하거나 SVM과 같은 기계 학습 방법 또는 이러한 결측치를 채우는 데이터 마이닝 방법과같은 다양한 통계 방법이 있다.

3. 결측치 처리 가이드라인

📌 10% 미만 : 삭제 또는 대치
📌 10% ~ 50% : regression or model based imputation
📌 50% 이상 : 해당 컬럼(변수) 자체 제거

결측치라는 개념을 코드프레소 강의를 통해 처음 알게 되었고
기초적인 처리방법에 대해서도 코드프레소 강의에서 처음 알게 되었습니다.

다음 강의에서는 인덱싱을 활용하여 데이터를 조회하는 방법에 대해 알아보겠습니다.

코드프레소 강의 덕분에 잘 몰랐던 개념도 알아가고, 다른 개념도 정확하게 파악하고 가네요

profile
꺾이지 않는 마음

0개의 댓글