[Pandas] isin / isna / notna
Pandas isin, Pandas isna, Pandas notna, Pandas isin / isna, Pandas null check
1.
2.
정의
| 메서드 | 의미 |
|---|---|
.isin(values) | 각 원소가 values 안에 있는지 (boolean Series) |
.isna() | NaN/NaT/None 여부 (isnull 별칭) |
.notna() | 위의 반대 (notnull 별칭) |
isin
여러 값 중 하나에 해당하는지 검사. SQL 의 IN (...) 과 같음.
python
import pandas as pd
df = pd.DataFrame({
'name': ['Alice', 'Bob', 'Charlie', 'Dave'],
'city': ['Seoul', 'Busan', 'Daegu', 'Seoul'],
})
mask = df['city'].isin(['Seoul', 'Busan'])
print(df[mask]) 결과
name city
0 Alice Seoul
1 Bob Busan
3 Dave Seoul| name | city | |
|---|---|---|
| 0 | Alice | Seoul |
| 1 | Bob | Busan |
| 3 | Dave | Seoul |
부정 (NOT IN)
df[~df['city'].isin(['Seoul'])] # Seoul 아닌 것
dict / DataFrame 전달
df.isin({'city': ['Seoul'], 'name': ['Alice']})
# 컬럼별로 다른 set
isna / notna
df = pd.DataFrame({'a': [1, None, 3], 'b': [None, 2, 3]})
df.isna() # 같은 shape 의 boolean DataFrame
df['a'].isna() # Series
df['a'].notna() # 반대
df[df['a'].notna()] # a 가 not null 인 행만
df.dropna() # 어느 컬럼이든 NaN 있는 행 제거
df.dropna(subset=['a']) # a 컬럼만 검사
python
import pandas as pd
import numpy as np
df = pd.DataFrame({
'a': [1, np.nan, 3, np.nan],
'b': [10, 20, np.nan, 40],
})
print(df.isna())
print('---null count---')
print(df.isna().sum()) 결과
a b
0 False False
1 True False
2 False True
3 True False
---null count---
a 2
b 1
dtype: int64any / all 과 결합
# 어느 컬럼이든 NaN 인 행
df[df.isna().any(axis=1)]
# 모든 컬럼이 NaN 인 행
df[df.isna().all(axis=1)]
# 컬럼별로 NaN 비율
df.isna().mean()
NaN, None, NaT 의 차이
| 값 | 타입 | 대응 |
|---|---|---|
np.nan | float | 수치형 결측 |
None | NoneType | object 결측, 자동 NaN 변환 |
pd.NaT | NaTType | datetime 결측 |
pd.NA | NAType | nullable dtype 의 결측 (pandas 1.x+) |
.isna() 는 위 모두를 True 로 본다.
함정
1. == np.nan 안 됨
df[df['a'] == np.nan] # ❌ 항상 False
df[df['a'].isna()] # ✓
NaN != NaN 이라는 IEEE 754 규약 때문.
2. is None 도 권장 안 함
df['a'] is None # ❌ Series 가 None 인지 검사
df['a'].isna() # ✓ 각 원소 검사
3. isin 의 dtype 불일치
df = pd.DataFrame({'id': [1, 2, 3]}) # int
df['id'].isin(['1', '2']) # 모두 False (str vs int)
df['id'].isin([1, 2]) # ✓
참고
이 글의 용어 (3개)
- [Pandas] Boolean Indexingpandas
- 정의 Boolean Indexing 은 True/False 의 Series 를 인덱서로 전달 해 행을 선택하는 패턴. pandas 의 가장 흔한 필터링 방법. 기본 <CodeWi…
- [Pandas] dropna / fillnapandas
- 정의 - : NaN 이 있는 행/열 제거 - : NaN 을 특정 값으로 대체 데이터 분석의 가장 기본적인 결측치 처리. dropna 기본 <CodeWithOutput langua…
- [Pandas] query / evalpandas
- 정의 - : 문자열로 boolean 표현식 을 전달해 행 필터링 - : 문자열로 계산 표현식 을 평가 의 가독성 있는 대안. query 기본 긴 조건일수록 query 가 짧고 읽…
💬 댓글