~ is not True
~ is False
위 두 개 statement는 파이썬에서 동일한 의미를 갖는 것으로 생각하기 쉽다,
그렇지만 pandas DataFrame의 메소드가 아니라, pandas에서 제공하는 기본 함수로서의 isna()를 사용할 때에는 주의가 필요하다.
https://pandas.pydata.org/docs/reference/api/pandas.isna.html
https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.isna.html
첫번째 링크가 판다스 기본 함수의 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를 반환한다.
'Computer > python' 카테고리의 다른 글
[Redash] name '_inplacevar_' is not defined (0) | 2022.12.01 |
---|---|
[seaborn] histplot legend 순서 뒤집는 법, 바꾸는 법 (0) | 2022.10.20 |
[ipynb] 쥬피터 노트북에서 %와 !의 차이 (0) | 2022.09.15 |
[seaborn] 예쁜 그래프를 만들 수 있는 커스텀 팔레트 만들기! (0) | 2022.01.05 |
[python] 가상환경(Ubuntu)에서 matplotlib 한글폰트 사용하기 (0) | 2021.11.04 |
댓글