Py) 전처리 - 결측치 처리-02

Py) 전처리 - 결측치 처리-02

Pandas 객체에 결측치를 처리하는 다양한 패턴을 알아본다. 여기서는 데이터프레임 객체의 다중 변수의 결측치를 한 번에 대치하는 방법을 알아본다.


본 게시물을 온전히 이해하기 위해서는 결측치 처리 기초 게시물 “Py) 기초 - Pandas(결측치)”를 먼저 충분히 숙지하는 것을 추천한다.

개요

결측치를 대치하기 위해서 사용하는 Pandas 객체의 메서드로 .fillna() 가 있다. 시리즈 객체에서 해당 메서드를 사용하면 해당 시리즈의 결측치를 모두 특정 값으로 대치할 수 있고, 데이터프레임 객체에서 해당 메서드를 사용하면 해당 객체 모든 변수의 결측치를 대치할 수 있다.

그런데 1개 이상의 일부 변수를 대상으로 대치작업을 실시하려면 코드를 어떻게 작성해야 하는지 알아보자.

실습

다음과 같이 라이브러리와 데이터를 준비한다.

1
2
3
4
5
6
7
8
import pandas as pd
import numpy as np

df = pd.DataFrame(dict(v1 = [100, 200, 300, 400],
v2 = [np.nan, "a", "b", np.nan],
v3 = [321, np.nan, 432, 543],
v4 = [np.nan, np.nan, 333, 444]))
df
v1 v2 v3 v4
0 100 NaN 321.0 NaN
1 200 a NaN NaN
2 300 b 432.0 333.0
3 400 NaN 543.0 444.0

연속된 위치의 변수의 결측치를 대치해보자.

1
2
3
df1 = df.copy()
df1.iloc[:, 2:4] = df1.iloc[:, 2:4].fillna(-999)
df1
v1 v2 v3 v4
0 100 NaN 321.0 -999.0
1 200 a -999.0 -999.0
2 300 b 432.0 333.0
3 400 NaN 543.0 444.0

연속되지 않은 위치의 변수의 결측치를 대치해보자.

1
2
3
df2 = df.copy()
df2.iloc[:, [1, 3]] = df1.iloc[:, [1, 3]].fillna(-999)
df2
v1 v2 v3 v4
0 100 -999 321.0 -999.0
1 200 a NaN -999.0
2 300 b 432.0 333.0
3 400 -999 543.0 444.0

인덱서를 사용하지 않고 온전히 .fillna() 의 기능을 이용해서 다중 변수의 결측치 대치를 한다면 다음과 같이 딕셔너리를 활용할 수 있다.

1
2
3
df3 = df.copy()
df3 = df3.fillna({"v2": -123, "v4": "OK"})
df3
v1 v2 v3 v4
0 100 -123 321.0 OK
1 200 a NaN OK
2 300 b 432.0 333.0
3 400 -123 543.0 444.0
Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×