이번 포스팅에서는 데이터 분석 시 필수적으로 알아야 하는 Python Pandas 라이브러리의 함수 중 결측치를 감지하는 함수 isna 에 대해서 알아 보겠습니다.
결측치를 감지하는 함수 isna 구문
isna 함수는 결측치 여부를 나타내는 동일한 크기의 bool 객체를 반환합니다. None 또는 numpy.NaN과 같은 NA 값은 True 로 반환하고, 다른 모든 것은 False 값으로 반환합니다.
빈 문자열 ” 또는 numpy.inf와 같은 문자는 NA 값으로 간주하지 않습니다. 하지만, pandas.options.mode.use_inf_as_na = True로 설정한다면, 해댱 값은 NA값으로 간주할 수 있습니다.
함수 기본 구문은 아래와 같습니다.
DataFrame.isna()
isna 함수의 반환값은 DataFrame입니다. 요소가 NA 값인지 여부를 나타내는 DataFrame의 각 요소에 대한 bool 값을 반환합니다.
isna 사용 예시
DataFrame에서의 isna 사용 예시
DataFrame의 어떤 항목이 NA인지 표시합니다.
# 예시 데이터 생성
import pandas as pd
import numpy as np
dataForIsna = pd.DataFrame(dict(age = [5, 6, np.nan],
born = [pd.NaT, pd.Timestamp('1939-05-27'),
pd.Timestamp('1940-04-25')],
name = ['Alfred', 'Batman', ''],
toy = [None, 'Batmobile', 'Joker']))
dataForIsna
--------------------------------------------------------------------------------
age born name toy
0 5.0 NaT Alfred None
1 6.0 1939-05-27 Batman Batmobile
2 NaN 1940-04-25 Joker
isna 함수를 사용해 보겠습니다.
dataForIsna.isna()
-----------------------------------------------------------------------------------
age born name toy
0 False True False True
1 False False False False
2 True False False False
isna 함수를 사용하면, DataFrame을 구성하는 모든 요소에 대해서 bool 값을 맵핑합니다. DataFrame의 요소가 결측치인 경우, True를 반환하고, 그렇지 않은 경우 False를 반환합니다.
Series에서의 isna 사용 예시
serForIsna = pd.Series([5, 6, np.nan])
serForIsna
----------------------------------------------
0 5.0
1 6.0
2 NaN
dtype: float64
isna 함수를 사용하면, 아래와 같습니다.
serForIsna.isna()
------------------------------------
0 False
1 False
2 True
dtype: bool
DataFrame과 마찬가지로 Series를 구성하는 모든 요소에 대해서 NA여부를 확인하고, NA인 경우 True, 그렇지 않은 경우, False를 반환합니다.
결측치를 감지하는 함수 isna 응용하기
DataFrame의 각 열별 결측치 갯수 확인하기
만약, DataFrame의 각 열 별로 결측치의 갯수가 몇개인지 계산하고자 한다면, 어떻게 하면 될까요? True = 1 이고, False = 0 이란 점을 착안하여 isna 함수와 sum 함수를 사용하면 매우 쉽게 산출할 수 있습니다. 아래 예시를 보겠습니다.
dataForIsna.isna().sum()
---------------------------------------------
age 1
born 1
name 0
toy 1
dtype: int64
각 열별 결측치의 갯수는 ‘age’ 열 1개, ‘born’ 열 1개, ‘name’ 열 0개, ‘toy’ 열 1개임을 알 수 있습니다.
DataFrame의 각 열별 결측치 비율 확인하기
만약, 각 DataFrame의 각 열 별로 결측치의 비율을 알고 싶다면, 어떻게 하면 될까요? isna 함수, sum 함수, len 함수를 사용하면 매우 쉽게 산출할 수 있습니다. 아래 예시를 보겠습니다.
dataForIsna.isna().sum() / len(dataForIsna)
----------------------------------------------------
age 0.333333
born 0.333333
name 0.000000
toy 0.333333
dtype: float64
이상으로 결측치를 감지하는 함수 isna 와 이를 기반으로 기초적인 사용 방법과 응용에 대해서 알아 보았습니다. 쉽지만, 매우 중요한 함수 isna를 기억하세요.
감사합니다!