본문 바로가기
Computer/python

[pandas] pd.isna() 사용 시 주의점: is False와 is not True의 차이점

by injeolmialmond 2022. 9. 15.
 ~ is not True
~ is False

위 두 개 statement는 파이썬에서 동일한 의미를 갖는 것으로 생각하기 쉽다,

그렇지만 pandas DataFrame의 메소드가 아니라, pandas에서 제공하는 기본 함수로서의 isna()를 사용할 때에는 주의가 필요하다.

 

https://pandas.pydata.org/docs/reference/api/pandas.isna.html

 

pandas.isna — pandas 1.4.4 documentation

For scalar input, returns a scalar boolean. For array input, returns an array of boolean indicating whether each corresponding element is missing.

pandas.pydata.org

https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.isna.html

 

pandas.DataFrame.isna — pandas 1.4.4 documentation

Detect missing values. Return a boolean same-sized object indicating if the values are NA. NA values, such as None or numpy.NaN, gets mapped to True values. Everything else gets mapped to False values. Characters such as empty strings '' or numpy.inf are n

pandas.pydata.org

 

첫번째 링크가 판다스 기본 함수의 documentation이고, 두번째 링크가 데이터프레임 메소드 documentation이다.

예시를 보면 알 수 있듯이, pandas.isna()의 경우 True, False가 아닌 값을 반환하기도 한다.

 

index = pd.DatetimeIndex(["2017-07-05", "2017-07-06", None,"2017-07-08"])
index
>>> DatetimeIndex(['2017-07-05', '2017-07-06', 'NaT', '2017-07-08'], dtype='datetime64[ns]', freq=None)
pd.isna(index)
>>> array([False, False,  True, False])

어떤 arraylike object를 넣었을 때,

- 이 object 자체가 nan값이면 True,

- 그렇지 않다면 해당 object 내의 요소들에 대해서 nan값 여부를 판단하여 똑같이 array 안에 이 True/False 값을 넣어 반환한다.

 

따라서 위의 예시에서도

array([False, False,  True, False])

이러한 array를 반환한 것은, 집어넣었던 index라는 object 자체는 nan이 아니지만, index 안의 요소들을 따져 보았을 때 세번째 요소가 Nan값이기 때문에 세번째에만 True가 있고 나머지 요소에 대해서는 False를 넣은 array가 반환된 것이다.

 

 

따라서 만약 조건문에서 pd.isna()를 사용할 때에는

if pd.isna(변수) is False:

if pd.isna(변수) is not True:

두 개의 반환값이 다를 수 있음을 유의하자.

앞서 들었던 동일한 예시는 첫번째 조건문의 경우 False이고, 두번째 조건문의 경우 True를 반환한다.

 

댓글