반응형

06-02. 결측값 제거 (dropna)

DataFrame.dropna(axis=0, how='any', thresh=None, subset=None, inplace=False)

 

개요


dropna 메서드는 DataFramde내의 결측값이 포함된 레이블을 제거하는 메서드입니다.

 

사용법


기본 사용법
df.dropna(axis=0, how='any', thresh=None, subset=None, inplace=False)
axis : {0: index / 1: columns} 결측치 제거를 진행 할 레이블입니다.
how : {'any' : 존재하면 제거 / 'all' : 모두 결측치면 제거} 제거할 유형입니다. 포함만 시켜도 제거할지, 전무 NA여야 제거할지 정할 수 있습니다.
tresh : 결측값이 아닌 값이 몇 개 미만일 경우에만 적용시키는 인수 입니다.
예를들어, tresh값이 3이라면 결측값이 아닌 값이 3개 미만일 경우에만 dropna메서드를 수행합니다.
subset : dropna메서드를 수행할 레이블을 지정합니다.
inplace : 원본을 변경할지의 여부입니다.

반응형

 

예시


먼저 pd.NA가 포함된 간단한 4x5짜리 데이터를 만들어보겠습니다.

col  = ['col1','col2','col3','col4','col5']
row  = ['row1','row2','row3','row4']
data = [[1,2,3,pd.NA,5],[6,pd.NA,8,pd.NA,10],[11,12,13,14,15],[pd.NA,pd.NA,pd.NA,pd.NA,pd.NA]]
df = pd.DataFrame(data,row,col)
print(df)
>>
      col1  col2  col3  col4  col5
row1     1     2     3  <NA>     5
row2     6  <NA>     8  <NA>    10
row3    11    12    13    14    15
row4  <NA>  <NA>  <NA>  <NA>  <NA>

axis값에 따른 결측치 제거 수행
axis가 0인경우 행에 대해서, axis가 1인경우 열에 대해서 결측치 제거가 수행됩니다.
axis=0인 경우 결측치가 포함된 모든 행이 제거되었습니다.

print(df.dropna(axis=0))
>>
     col1 col2 col3 col4 col5
row3   11   12   13   14   15

axis=1인 경우 결측치가 포함된 모든 열이 제거되었습니다. 예시의 경우 모든 열에 NA가 존재하므로 빈 값이 반환됩니다.

print(df.dropna(axis=1))
>>
Empty DataFrame
Columns: []
Index: [row1, row2, row3, row4]


how로 연산기준을 정할 경우

기본적으로 how 는 'any'이며 이 경우 한 값이라도 NA를 가진다면 해당 레이블을 제거합니다.

print(df.dropna(how='any'))
>>
     col1 col2 col3 col4 col5
row3   11   12   13   14   15

how를 'all'로 할 경우 모든값이 NA인 레이블만 삭제됩니다.

print(df.dropna(how='all'))
>>
     col1  col2 col3  col4 col5
row1    1     2    3  <NA>    5
row2    6  <NA>    8  <NA>   10
row3   11    12   13    14   15


thresh 를 이용하는 경우
thresh를 이용하여 정상값의 수를 보장할 수 있습니다.
thresh가 3일 경우 정상값이 3개 미만인 경우에 대해서만 결측치 보정을 진행합니다.

print(df.dropna(thresh=3))
>>
     col1  col2 col3  col4 col5
row1    1     2    3  <NA>    5
row2    6  <NA>    8  <NA>   10
row3   11    12   13    14   15

thresh가 4인 경우 정상값이 4개 미만인 경우에 대해서 결측치 보정을 진행합니다.

print(df.dropna(thresh=4))
>>
     col1 col2 col3  col4 col5
row1    1    2    3  <NA>    5
row3   11   12   13    14   15


subset 인수를 통한 레이블 지정
subset에 리스트형태의 값을 입력함으로써 결측치 제거를 수행할 레이블을 지정할 수 있습니다.
col1, col2에 대해서 결측치가 있는경우만 제거되었습니다.

print(df.dropna(subset=['col1','col2']))
>>
     col1 col2 col3  col4 col5
row1    1    2    3  <NA>    5
row3   11   12   13    14   15

inplcae 인수를 통한 원본의 수정
Pandas에서 공통적으로 inplace 인수는 원본의 수정을 의미합니다. inplace가 True인 경우 원본이 수정됩니다.

df.dropna(inplace=True)
print(df)
>>
     col1 col2 col3 col4 col5    #원본에 대해서도 결측치 제거가 수행됨.
row3   11   12   13   14   15
반응형

+ 최근 글