Python

[Pandas] - Dataframe 의 NaN 값 다루기

yugyeong 2022. 11. 24. 15:08

 

 

데이터프레임에서 비어있는 데이터는 NaN 으로 채워지게 된다.

NaN을 다루는 방법을 알아보자.

 

 

 

df.isna( )

데이터프레임에서 NaN이 어느자리에 있는지 나타낼 때는 isna( ) 함수를 사용한다.

NaN이 들어있는 자리는 True로 출력되고, 데이터가 채워져있는 자리는 False로 출력된다.

 

 

 

df.notna( )

notna( ) 는 isna( ) 의 반대 함수이다.

데이터가 들어있는 자리는 True가 출력되고, NaN이 들어있는 자리는 False로 출력이 된다.

 

 

 

 

NaN을 처리하는 전략

NaN을 처리하는 전략에는 크게 세가지 방법이 있다.

 

1. 삭제하기

2. 특정 값으로 채우기

3. 비어있는 데이터의 위 행의 데이터, 아래행의 데이터로 채우기 or  왼쪽 열의 데이터, 오른쪽 열의 데이터로 채우기

 

 

 

1. NaN 이 들어있는 데이터 행 삭제하기

 

먼저 NaN이 들어있는 데이터 행을 삭제하는 방법이다.

dropna( )함수를 사용하면 NaN값이 들어있는 데이터행은 삭제된다.

 

 

2. NaN 자리를 특정 값으로 채우기

 

 

NaN 자리를 특정 값으로 채우는 방법은 fillna( ) 함수를 이용하는 것이다.

괄호 안에는 NaN자리에 채우고자 하는 값을 넣어준다.

 

아래는 df.fillna(0)을 사용하여 NaN자리를 전부 0으로 채운 결과이다.

 

 

특정 컬럼들만 fillna( ) 를 이용하여 값을 채울 수 있다.

방법은 아래를 참고하면 된다.

 

 

 

3-1. 비어있는 데이터의 위 행, 아래 행으로 데이터 채우기

 

NaN자리의 위행, 아래행으로 데이터를 채우는 방법이다. 이때는 method를 이용하면 된다.

df.fillna( method = 'ffill', axis= 0 ) 형태이다.

method에는 위 행으로 채울경우 'ffill' 을 넣고, 아래행으로 채울 경우 'bfill' 을 이용하면 된다.

 

 

 

3-2. 비어있는 데이터의 왼쪽 행, 오른쪽 행으로 데이터 채우기

 

NaN 데이터의 왼쪽 값, 오른쪽 값으로 데이터를 채우는 방법이다.

위와 동일하게 fillna( method= 'ffill') 를 이용한다. 단 axis= 1로 설정해줘야 한다.

'ffill'일 경우 왼쪽 열의 데이터로 NaN값을 채우고, 'bfill'일 경우 오른쪽 열의 데이터로 NaN값을 채운다.

 

 

3-3. 비어있는 데이터를 각 컬럼의 평균 값 또는 최댓값으로 채우기

 

만약 NaN 값을 각 컬럼의 평균 또는 최댓값으로 채우고자 한다면, 기존 방법을 응용하여 적용시키면 된다.

df.mean()은 각 컬럼의 평균 값을 구하는 함수이기 때문에 fillna괄호에 df.mean()을 넣어주면, NaN값에는 각 컬럼의 평균 값이 채워진다.

 

최댓값도 동일한 방법이다.

df.max()는 각 컬럼의 최댓값을 구하는 함수이기 때문에 fillna() 에 df.max()를 넣어주면, 각 컬럼의 최댓값으로 NaN값을 채워준다. 

 

같은 방식으로 NaN 값에 각 컬럼의 표준편차, 중앙값 등으로 채워넣을 수 있다.