Python pandas 결측값(NaN) 일괄 변경 fillna 사용법

pandas DataFrame 또는 Series에 결측값 NaN을 임의의 값으로 변경하는 방법을 알아보겠습니다.

결측값 NaN을 다른 값으로 변경하기 위해서 fillna 함수를 사용합니다.

fillna 함수를 사용해 DataFrame의 결측값 NaN을 다른 값으로 일괄 변경하는 방법을 보겠습니다.

DataFrame에 NaN을 만들기 위해 csv를 불러왔습니다.

DataFrame에는 아래처럼 결측값 NaN이 존재합니다.

import pandas as pd

df = pd.read_csv('data/tmp/sample.csv')
print(df)
#       name   age state  point  other
# 0    Alice  24.0    NY    NaN    NaN
# 1      NaN   NaN   NaN    NaN    NaN
# 2  Charlie   NaN    CA    NaN    NaN
# 3     Dave  68.0    TX   70.0    NaN
# 4    Ellen   NaN    CA   88.0    NaN
# 5    Frank  30.0   NaN    NaN    NaN

결측값 NaN 일괄 변경

DataFrame에 결측값 NaN이 있는 경우에는 0으로 표시하는 샘플을 보겠습니다.

import pandas as pd

df = pd.read_csv('data/tmp/sample.csv')
print(df.fillna(0))

 

결과

      name   age state  point  other
0    Alice  24.0    NY    0.0    0.0
1        0   0.0     0    0.0    0.0
2  Charlie   0.0    CA    0.0    0.0
3     Dave  68.0    TX   70.0    0.0
4    Ellen   0.0    CA   88.0    0.0
5    Frank  30.0     0    0.0    0.0

 

fillna 함수에 파라미터를 0으로 지정했습니다.

fillna함수에 특별한 설정 없이 값을 지정하면 모든 결측값 NaN이 일괄로 변경됩니다.

결측값 NaN 열 변경

이번에는 열마다 지정한 값으로 변경하는 방법을 보겠습니다.

열마다 결측값 NaN을 지정한 값으로 변경하기 위해서는 dict 형태로 파라미터를 설정해야 합니다.

{열 이름 : 변환 값} 형태로 지정합니다.

import pandas as pd

df = pd.read_csv('data/tmp/sample.csv')
print(df.fillna({'name': 'XXX', 'age': 20, 'ZZZ': 100}))

 

결과

      name   age state  point  other
0    Alice  24.0    NY    NaN    NaN
1      XXX  20.0   NaN    NaN    NaN
2  Charlie  20.0    CA    NaN    NaN
3     Dave  68.0    TX   70.0    NaN
4    Ellen  20.0    CA   88.0    NaN
5    Frank  30.0   NaN    NaN    NaN

 

name 항목에 결측값 NaN이 있는 경우에는 XXX로 변환하도록 했습니다.

age 항목에 결측값 NaN이 있는 경우에는 20으로 변환하도록 했습니다.

state, point, other 항목은 지정하지 않았기 때문에 결측값이 그대로 표시가 되고 있습니다.

그리고 ZZZ라는 항목에 결측값이 있는 경우 100으로 변환하도록 했습니다.

하지만 ZZZ 항목은 없는 항목이기 때문에 변환된 값은 없습니다.

원본 데이터 변경

fillna 함수를 사용해 결측값 NaN값을 변경하는 경우 변경된 DataFrame이 반환됩니다.

반환값 없이 원래 값이 들어있는 DataFrame 값을 직접 변경하고 싶은 경우에는 inplace 옵션을 지정합니다.

import pandas as pd

df = pd.read_csv('data/tmp/sample.csv')

df.fillna(0, inplace=True)
print(df)

 

결과

      name   age state  point  other
0    Alice  24.0    NY    0.0    0.0
1        0   0.0     0    0.0    0.0
2  Charlie   0.0    CA    0.0    0.0
3     Dave  68.0    TX   70.0    0.0
4    Ellen   0.0    CA   88.0    0.0
5    Frank  30.0     0    0.0    0.0

 

csv에서 데이터를 읽어 들인 DataFrame 변수 df를 직접 변경하기 위해 inplace 옵션을 True로 지정했습니다.

결과를 보면 원본 DataFrame의 결측값 NaN 값이 지정한 값 0으로 일괄 변경된 것을 확인할 수 있습니다.

Series에서도 fillna 함수를 사용해 결측값 NaN 값을 일괄로 변경할 수 있습니다.

댓글