본문 바로가기
self.python

[python] DataFrame 의 결측값, 중복값 확인하고 제거하기

by 톤토니 2022. 5. 12.
반응형

 

 

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 을 쓰면 그 조건에 맞는 데이터만 추출할 수 있는데

중복값을 가져오라는 조건에 ~ 를 붙여 중복값이 아닌 값만을 추출하여 새로운 데이터 프레임에 저장해주었다.

 

 

 

 

 

 

 

반응형

댓글