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 값을 일괄로 변경할 수 있습니다.
댓글