반응형

06-04. 결측값 변경 (fillna / backfill / bfill / pad / ffill)

DataFrame.fillna(value=None, method=None, axis=None, inplace=False, limit=None, downcast=None)

DataFrame.backfill( ) / DataFrame.bfill : DataFrame.fillna(mathod='bfill')과 동일합니다.
DataFrame.pad / DataFrame.ffill : DataFrame.fillna(method='ffill')과 동일합니다.

 

개요


fillna 메서드는 DataFrame에서 결측값을 원하는 값으로 변경하는 메서드입니다.

 

사용법


기본 사용법
df.fillna(value=None, method=None, axis=None, inplace=False, limit=None, downcast=None)
value : 결측값을 대체할 값입니다. dict형태로도 가능합니다.
method : 결측값을 변경할 방식입니다. bfill로 할경우 결측값을 바로 아래 값과 동일하게 변경합니다.
ffill로 할 경우 결측값을 바로 위 값과 동일하게 변경합니다.
axis : {0 : index / 1 : columns} fillna 메서드를 적용할 레이블입니다.
inplace : 원본을 변경할지 여부입니다. True일 경우 원본을 변경하게 됩니다.
limit : 결측값을 변경할 횟수입니다. 위에서부터 limit로 지정된 갯수만큼만 변경합니다.
downcast : 다운캐스트할지 여부입니다. downcast='infer'일 경우 float64를 int64로 변경합니다.

반응형

 

예시


먼저 다양한 결측값이 포함된 간단한 5x5짜리 데이터를 만들어보겠습니다.

col  = ['col1','col2','col3','col4','col5']
row  = ['row1','row2','row3','row4','row5']
na = np.nan
data = [[na, 2,na, 4,na],
        [ 6, 7,na, 9,na],
        [11,na,na,14,15],
        [na,17,na,na,20],
        [na,22,na,na,25]]
df = pd.DataFrame(data,row,col)
print(df)
>>
      col1  col2  col3  col4  col5
row1   NaN   2.0   NaN   4.0   NaN
row2   6.0   7.0   NaN   9.0   NaN
row3  11.0   NaN   NaN  14.0  15.0
row4   NaN  17.0   NaN   NaN  20.0
row5   NaN  22.0   NaN   NaN  25.0

 


value의 형식에 따른 사용
value가 숫자나 문자일 경우 그대로 결측값을 대체하게 됩니다. 여기서는 A로 바꿔보겠습니다.

print(df.fillna('A'))
>>
      col1  col2 col3  col4  col5
row1     A   2.0    A   4.0     A
row2   6.0   7.0    A   9.0     A
row3  11.0     A    A  14.0  15.0
row4     A  17.0    A     A  20.0
row5     A  22.0    A     A  25.0

dict형태로 입력할 경우 각각 레이블값에 대해 원하는 값으로의 변경이 가능합니다.

dict = {'col1':'A','col2':'B','col3':'C','col4':'D','col5':'E'}
print(df.fillna(value=dict))
>>
      col1  col2 col3  col4  col5
row1     A   2.0    C   4.0     E
row2   6.0   7.0    C   9.0     E
row3  11.0     B    C  14.0  15.0
row4     A  17.0    C     D  20.0
row5     A  22.0    C     D  25.0


method인수를 사용하는 경우
method인수에 bfill을 입력할 경우 결측값이 바로 아래값과 동일하게 설정됩니다.
※ df.backfill( )이나 df.bfill( )과 완전히 동일한 기능을 수행합니다.

print(df.fillna(method='bfill'))
>>
      col1  col2  col3  col4  col5
row1   6.0   2.0   NaN   4.0  15.0
row2   6.0   7.0   NaN   9.0  15.0
row3  11.0  17.0   NaN  14.0  15.0
row4   NaN  17.0   NaN   NaN  20.0
row5   NaN  22.0   NaN   NaN  25.0

method인수에 ffill을 입력할 경우 결측값이 바로 위값과 동일하게 설정됩니다.
※ df.pad( )나 df.ffill( )과 완전히 동일한 기능을 수행합니다.

print(df.fillna(method='ffill'))
>>
      col1  col2  col3  col4  col5
row1   NaN   2.0   NaN   4.0   NaN
row2   6.0   7.0   NaN   9.0   NaN
row3  11.0   7.0   NaN  14.0  15.0
row4  11.0  17.0   NaN  14.0  20.0
row5  11.0  22.0   NaN  14.0  25.0


limit인수를 사용하는 경우
limit인수는 각 레이블값에 대해서 결측치 변경을 수행할 횟수입니다. 행 기준일경우 왼쪽부터, 열 기준일 경우 위에서부터 수행합니다.

print(df.fillna('A', limit=2))
>>
      col1  col2 col3  col4  col5
row1     A   2.0    A   4.0     A
row2   6.0   7.0    A   9.0     A
row3  11.0     A  NaN  14.0  15.0
row4     A  17.0  NaN     A  20.0
row5   NaN  22.0  NaN     A  25.0


downcast인수를 사용하는 경우
downcast 인수를 'infer'로 설정함으로써 float64형태를 int64형태로 변경할 수 있습니다.

print(df.fillna(0, downcast='infer'))
>>
      col1  col2  col3  col4  col5
row1     0     2     0     4     0
row2     6     7     0     9     0
row3    11     0     0    14    15
row4     0    17     0     0    20
row5     0    22     0     0    25


inplace를 사용하는 경우
다른 파이썬 객체에서와 마찬가지로 inplace는 원본을 덮어씌우는 기능과 유사한 기능알 합니다.
즉 df.fillna(0, inplace=True) 는 df=df.fillna(0)과 동일한 기능을 합니다.

df.fillna('A',inplace=True)
print(df)
>>
      col1  col2 col3  col4  col5
row1     A   2.0    A   4.0     A
row2   6.0   7.0    A   9.0     A
row3  11.0     A    A  14.0  15.0
row4     A  17.0    A     A  20.0
row5     A  22.0    A     A  25.0
반응형

+ 최근 글