Python/Pandas

[Pandas] 파이썬 결측치 포함 행, 열 제거 dropna 함수 사용법

jimmy_AI 2022. 3. 7. 00:56
반응형

판다스 데이터프레임 NaN 값 포함 위치 제거 방법(pd.dropna)

안녕하세요. 지난 글에서 다루었던 데이터프레임 내 결측값의 위치를 찾는 방법에 이어,

이번 글에서는 결측치를 포함하고 있는 행이나 열을 제거하는 방법을 dropna 함수의

사용법을 기반으로 하여 다루어보도록 하겠습니다.

 

결측값의 위치와 개수를 확인하는 방법에 관한 내용은 아래 링크의 지난 글을 참고해주세요.

 

[Pandas] 파이썬 결측치 확인 방법 : isnull, notnull

판다스 데이터프레임 NaN 값 위치, 개수 확인 안녕하세요. 이번 시간에는 파이썬 판다스 라이브러리에서 데이터프레임 내의 결측값 행을 확인하고, 각 열 별로 결측치의 개수를 세는 방법을 isnull

jimmy-ai.tistory.com

 

참고로 이 글은 pandas dropna 함수의 공식 설명 document를 기반으로 작성되었습니다.

 

dropna 함수에 의하여 결측치가 제거되는 양상에 대한 이해를 돕기 위하여,

아래와 같이 행마다 다양한 형태로 결측치가 분포되어 있는

간단한 데이터프레임 하나를 예시로 들어보도록 하겠습니다.

import pandas as pd
import numpy as np

a = {'A' : [np.nan, 2, 3, 4, 5, 6], 'B' : [np.nan, np.nan, np.nan, 4, 5, 6], 'C' : [np.nan, 2, np.nan, np.nan, 5, 6]}
df = pd.DataFrame(a)
df

 

 

pd.dropna 함수 기본 사용법 : 결측치 포함 행 제거

우선, 가장 기본적인 dropna 함수를 데이터프레임에 직접 적용한 경우를 살펴보겠습니다.

이 경우, NaN 값이 1개라도 포함된 행이 모두 제거됩니다.

df.dropna()

 

 

subset 인자 : 특정 열 기준 NaN 값 탐색 제거

모든 결측값을 대상으로 행을 제거하는 것이 아닌,

특정 열의 위치에서 결측치가 등장할 경우에만 행을 제거하고 싶다면

subset 인자 내에 결측값 탐색을 원하는 열들의 이름을 리스트로 지정해주시면 됩니다.

 

예를 들어, B열에서 NaN 값이 관측되는 행을 제거하고 싶은 경우 예시는 아래와 같습니다.

df.dropna(subset = ['B'])

만일, 결측치 등장 열을 기준으로 제거를 진행하고 있는 경우에는

subset에 column 이름 대신 index 목록을 적어서 특정 행 위치 결측치 탐색이 가능합니다.

 

 

how 인자 : 모든 값이 결측치인 경우만 제거 여부 지정

기존에는 하나 이상의 값만 결측치여도 해당 행이 제거되었는데,

만일 모든 값이 전부 NaN인 행만 제거하고 싶은 경우에는 how 인자를 'all'로 설정하면 됩니다.

df.dropna(how = 'all')

모든 값이 전부 NaN인 첫번째 행만 지워진 모습을 확인할 수 있었습니다.

반응형

thresh 인자 : 제거 기준 NaN 값 개수 역치 설정

결측치 개수가 특정 개수 이상인 위치를 필터링하고 싶은 경우에는

thresh 인자에 원하는 역치 개수 숫자를 지정해주시면 됩니다.

 

예시로 NaN이 2개 이상인 행만 골라서 제거하는 경우는 아래와 같습니다.

df.dropna(thresh = 2)

NaN이 2개 이상인 0번과 2번 인덱스 행만 지워진 모습을 볼 수 있었습니다.

 

 

axis 인자 : 결측치 포함 열 제거 경우 지정

결측치를 포함하고 있는 행 대신 열 방향으로 제거하고 싶은 경우

axis 인자를 1 혹은 'columns'로 지정해주시면 됩니다.

 

이번에는 위에서 사용한 예제와 다른 df2 데이터프레임을 예시로 들어보겠습니다.

b = {'D' : [1, 2, 3], 'E' : [np.nan, 2, 3], 'F' : [np.nan, np.nan, np.nan]}
df2 = pd.DataFrame(b)
df2

 

axis = 1을 적용하여 결측치 포함 열을 제거한 결과는 아래와 같습니다.

df2.dropna(axis = 1)

NaN이 포함된 E, F열은 지워지고 D열만 생존하였습니다.

 

위에서 다룬 다른 인자와의 조합도 가능합니다. how = 'all'을 같이 적용하여

모든 값이 전부 결측값인 열만 제거한 예시는 아래와 같습니다.

df2.dropna(axis = 1, how = 'all')

이번에는 일부 값만 NaN인 E열은 지워지지 않고 남겨질 수 있었습니다.