개요
DataFrame에서 특정 결측값을 포함하는 행을 찾을 때는 isnull, isna 함수 등을 사용하여 아래와 같이 필터링할 수 있다.
df[df['a'].isnull()]
df[df['a'].isna()]
여러 컬럼에서 결측값을 포함하는 행을 찾을 때는 OR 연산자를 이용할 수 있지만, 확인해야하는 컬럼이 많으면 코드가 지저분해진다.
한 줄로 찾을 수 있는 방법을 적어둔다.
any / all
2022.10.08 - [Python] any/all - 여러 요소의 참/거짓 확인에서 확인했던 Python의 all, any 함수를 Pandas에서도 제공하고 있다. Pandas에서 all과 any 함수는 Series 또는 DataFrame 축을 따라 요소가 참인지 거짓인지를 판단한다. any 함수는 값이 참인 경우가 하나라도 존재하면 True를 반환하고, all은 모든 값이 참이어야 True를 반환한다.
DataFrame.any(*, axis=0, bool_only=False, skipna=True, **kwargs)
DataFrame.all(axis=0, bool_only=False, skipna=True, **kwargs)
axis 매개변수는 축을 결정한다. axis가 0이면 컬럼에 대한 결과를 반환하고, 1이면 행에 대한 결과를 반환한다. 기본값은 0이다.
헷갈리니 예시로 확인해본다.
사용 예시
예시 데이터
df = pd.DataFrame({
'a': ['A', 'A', 'B', 'B', 'B', None],
'b': [1, 2, 5, None, 4, 6],
'c': ['x', 'y', 'z', 'x', 'y', 'z']
})
컬럼에 결측값이 존재하는지 확인
df.isnull().any()
5행 a열, 3행 b열에 결측값이 존재하므로 a, b 컬럼에서 True를 반환한다.
행에 결측값이 존재하는지 확인
df.isnull().any(axis=1)
5행 a열, 3행 b열에 결측값이 존재하므로 3행, 5행에서 True를 반환한다.
따라서 여러 컬럼에 대해 결측값이 존재하는 행을 필터링을 하고 싶다면 아래와 같이 사용하면 된다.
df[df[['a', 'c']].isnull().any(axis=1)]
참고 문서
https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.any.html
https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.all.html