본문 바로가기
Data Science

[Pandas] 판다스 결측치 제거 대체 fillna(0) 간단히 응용하기

by Lora Baek 2022. 8. 17.
300x250

칼럼에 값이 없는 공백값일 때, 즉 Null값이 존재할 때, 판다스는 이를 NaN으로 표기한다.

엄밀히 말하면 공백을 의미하는 Null, 숫자가 아니라는 뜻의 NaN(Not a Number), NA(Non Available)은 다른 뜻이지만

판다스에서 다루는 결측치는 NaN으로 이해하는 것이 편할 것이다.

 

NaN은 평균이나 합계를 계산할 때 제외가 되는 등, 말 그대로 사용할 수 없는 데이터를 의미하기 때문에

적절한 처리를 거쳐주는 과정이 필요하다.

실무에서는 여러 가지 상황과 요인을 고려해야 하기 때문에 꽤 많은 고민을 거쳐야 하지만,

이 포스팅에서는 특정 값으로 대체하거나 제거하는 방법론적인 부분만 다룰 예정이다.

 

Pandas isna()

먼저 NaN 값이 존재하는지 여부를 확인하기 위해서는 판다스 isna()를 사용해서

데이터프레임명.isna()와 같은 코드로 데이터가 NaN이면 True, 그렇지 않으면 False 값을 얻을 수 있다.

True는 1, False는 0이라는 점을 이용해서 여기에 sum 함수를 추가하면 칼럼별로 결측치 개수를 구할 수 있다.

데이터프레임명.isna().sum() 과 같은 코드를 이용하면 된다.

 

Pandas fillna()

이름에서도 알 수 있듯이, NaN값을 특정한 값으로 대체해서 채워넣을 수 있다.

특정 칼럼의 NaN 값을 원하는 값으로 대체할 수 있는데, drop 함수를 사용할 때와 마찬가지로 inplace=True, False 옵션을 유의해서 사용해야 한다.

inplace=True 파라미터를 추가하면 실제 데이터 세트 값이 변경된다.

 

가장 흔한 건 모든 값을 0으로 대체하는 fillna(0) 이지만, 평균 혹은 원하는 특정 값을 넣는 경우도 많다.

 

캐글 타이타닉 데이터에서 Age 칼럼의 NaN 값은 평균 나이로, Embarked 칼럼의 NaN 값은 S로 대체해보자.

df.isna().sum() # 결측치 처리 전
df['Age']=df['Age'].fillna(df['Age'].mean())
df['Embarked']=df['Embarked'].fillna('S')
df.isna().sum() #결측치 처리 후

 

 

댓글