DataFrame 의 결측값, 중복값 확인하고 제거하기
데이터 프레임 내의 데이터들은 결측치(값이 없는 칸) 또는 중복값(모든 열의 값이 동일한 row 들)이 있을 수 있다.
데이터 분석을 하기 전에 이 값들을 제거하고 시작하는 것이
용량을 줄이기에도 좋고, 이상한 결과가 나오지 않게 하는 데에도 좋다.
import numpy as np
import numpy as pd
import matplotlib.pyplot as plt
import seaborn as sns
# 데이터 분석하는데 import 하고 시작하는 것들.
# 이번 글에서는 필요없는 부분도 있지만 보통 데이터 분석할 때 다 쓰인다.
1. 결측치 확인하기
결측치는 .isna( ) 또는 .isnull( ) 함수로 쉽게 확인할 수 있다.
df1.isna()
# 또는
df1.isnull()
#출력은 데이터 프레임에 결측값이 있는 부분은 True, 아니면 False 로 값이 바뀌어 나온다.
뒤에 .sum( ) 을 붙이면 각 변수별 결측치가 몇 개 있는지 세어서 볼 수 있다.
df1.isnull().sum()
# df1 의 columns 이 '이름', '나이', '성별' 이렇게 있었다면
'''
'이름' : 결측 데이터 개수
'나이' : 결측 데이터 개수
'성별' : 결측 데이터 개수
'''
# 이렇게 각 변수별로 개수가 정리되어 나온다.
그 뒤에 .sum( ) 을 한 번 더 붙이면 지금 보고있는 df1 이라는 데이터 프레임에 있는 결측치가 총 몇 개 있는지 출력된다.
df1.isnull().sum().sum()
# df1에 있는 결측치의 총 개수
1-2. 결측치 제거하기
결측값을 제거하는 것은 데이터 프레임의 필터를 사용할 수 도 있고, .drop( ) 함수를 사용하는 방법도 있다.
그 중 먼저 .drop() 함수를 이용하는 방법을 보자.
만약 df1 가 6개의 columns = ['이름', '나이', '성별', '취미', '특기', '별명'] 을 가진 학생 총 10명의 정보를 가지고 있는 데이터 프레임이라고 하자.
그 중에 특기와 별명은 전부 쓰지 않아서 None 값이라고 할 때
이 데이터 프레임으로 분석을 하려면 '특기' 와 '별명'은 용량을 위해서 제거하고 시작하는게 낫다고 생각할 수 있다.
df1_del_col = df1.drop(columns = ['특기', '별명'])
제거 하려는 변수가 여러개 일 때는 이렇게 drop함수 안에 columns = [리스트] 형식으로 쓰면 된다.
그리고 '취미' 의 경우에는 몇명의 학생이 쓰지 않아 일부의 데이터만 결측치를 가지고 있다고 하자.
그런 경우에는 데이터 프레임의 필터를 활용할 수 있다.
df_new = df_del_col[~df_del_col['취미'].isnull()]
취미가 비어있는 데이터라는 조건에 ~ 를 붙여 취미가 비어있지 않은 데이터만 뽑아 df_new 에 새로 저장하였다.
2. 중복값 확인하기
중복값은 duplicated( ) 함수를 이용하여 찾아낼 수 있다.
print(df1.duplicated(keep = False).sum())
# 데이터 프레임 내의 중복된 행의 개수를 출력해줌
df1[df1.duplicated(keep = False)]
# 데이터 프레임 내의 모든 중복된 행을 출력해줌
여기서 duplicated( ) 함수 내에는 keep 으로 조건을 설정하여 볼 수 있다. 'first', 'last', False 를 입력할 수 있다.
keep = 'first' : 중복값 중 제일 앞 번호의 행을 보여줌
keep = 'last' : 중복값 중 제일 뒷 번호의 행을 보여줌
keep = False : 중복값 전부를 보여줌
2-2. 중복값 제거하기
중복값을 제거하는 방법은 물론 데이터 프레임 필터링 기능을 사용하는 방법도 있지만,
drop_duplicates( ) 함수를 사용해서도 쉽게 제거를 할 수 있다.
df_new = df1[~df1.duplicated(keep = False)]
# 데이터 프레임 필터링을 이용한 제거방법
df_new2 = df1.drop_duplicates()
# 함수를 이용한 중복값 제거 방법
데이터 프레임의 대괄호 안에 condition 을 쓰면 그 조건에 맞는 데이터만 추출할 수 있는데
중복값을 가져오라는 조건에 ~ 를 붙여 중복값이 아닌 값만을 추출하여 새로운 데이터 프레임에 저장해주었다.
'self.python' 카테고리의 다른 글
[python] 재귀호출로 최대공약수 구하기 - 유클리드 호제법 이용 (0) | 2022.05.16 |
---|---|
[python] DataFrame의 결측치를 시각화 해서 확인하기 - missingno 사용 (0) | 2022.05.13 |
[python] 정규표현식(Regular Expressions)과 메타문자 정리 (0) | 2022.05.12 |
[python] seaborn 기본 제공 데이터셋 불러오기, heatmap 그리기 (0) | 2022.05.11 |
[Numpy] Numpy 기초 - 기본적인 배열 다루기 (0) | 2022.05.10 |
댓글