이번 포스팅에서는 데이터 분석 시 필수적으로 알아야 하는 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 Jokerisna 함수를 사용해 보겠습니다.
dataForIsna.isna()
-----------------------------------------------------------------------------------
age born name toy
0 False True False True
1 False False False False
2 True False False Falseisna 함수를 사용하면, DataFrame을 구성하는 모든 요소에 대해서 bool 값을 맵핑합니다. DataFrame의 요소가 결측치인 경우, True를 반환하고, 그렇지 않은 경우 False를 반환합니다.
Series에서의 isna 사용 예시
serForIsna = pd.Series([5, 6, np.nan])
serForIsna
----------------------------------------------
0 5.0
1 6.0
2 NaN
dtype: float64isna 함수를 사용하면, 아래와 같습니다.
serForIsna.isna()
------------------------------------
0 False
1 False
2 True
dtype: boolDataFrame과 마찬가지로 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를 기억하세요.
감사합니다!