본문 바로가기
스터디 공간

[Pandas] 누락 데이터 처리

by 재스민맛 2021. 3. 1.
반응형

201217 Python Study

 

Pandas의 Input으로 주기 위한 데이터는 깨끗하거나 형태가 단일한 경우가 극히 드물다.

이런 경우, 누락데이터를 처리해주어야한다.

None, Nan(Not a Number) 등이 누락된 데이터를 말한다.

 

누락된 데이터의 특성을 한번 살펴보자

* Numpy nan / None 데이터

 

1+np.nan의 값은 nan으로 나오고

None값은 연산을 할경우 오류가 발생한다.

이를 볼때, None값을 가지는 배열에서 연산을 할 경우 오류를 발생할 것임을 알 수 있다.

 

■ NaN의 특성

1+ np.nan = nan

0 * np.nan = nan

NaN이 포함된 객체의 모든 연산은 NaN으로 값을 출력하므로 기억해두면 좋다

 

■Null값 연산

   - isnull() / notnull() / dropna() / fillna()

1. isnull() : 데이터의 널값이 존재하는지를 탐지

 

isnull()의 결과값으로 np.nan 혹은, None값이 있는 경우만 True로 반환

이를 활용하여, data.isnull().sum() ▶ True 데이터의 합으로 총 Null값의 총 개수를 알 수 있다. 

 

2. notnull() : isnull()의 역

null 값의 경우 False를 반환한다

3. dropna() : 데이터에 필터를 적용하여 제거 가능 (delete의 경우 모판을 건드리나, dropna는 건드리지 않는다)

 

data.dropna()와 같은 결과

- dropna()는 axis를 지정할 수 있는데, Series는 하나의 축밖에 없기 때문에 dropna()를 할 경우 Default axis=0을 기준으로 dropna()를 실행한다.

- 추가적으로 axis=1을 할 경우, 에러가 난다.

- 처음 데이터를 가공할 때, axis를 방향성에 대해서 굉장히 헷갈릴 수 있는데 쉽게 할 수 있는 방법으로

   ★ 새로 생겨나는 axis가 가장 높은 axis를 가진다

해당 데이터에서, 세로 방향(axis=0)은 기존에 가지고 있던 축이고, data2를 추가하면서, axis가 새로 생겨났으므로 가장 높은 axis를 가지는 것으로 이해를 하면 헷갈리지 않을 수 있다.

 

이 경우, dropna(axis=0) 과 dropna(axis=1)의 차이를 살펴보면,

dropna(axis=0)은 기존에 data1을 dropna한 결과에서 유추하면 왜 저렇게 나왔는지 유추가 가능하며

dropna(axis=1)의 경우 가로축 방향으로 가며, NaN값이 있는 경우 삭제를 하여 모든 Series 객체가 삭제가 된것임을 알 수 있다.

- 그외에도, dropna(thresh=2, how='all'/'any', axis=?) 등의 option이 있습니다.

   - thresh=2라면, axis를 정하고 그 axis에 데이터의 개수가 2개 미만이면 그 데이터를 없애는 역할을 합니다

   - how는 'all'이라면 모든 데이터가 nan 혹은 None 값이면 없애게 됩니다.

   - 'any'는, 모든 데이터가 있어야지만 그 데이터를 살리고, 하나라도 없을 경우 없애게 됩니다.

 

 

4. fillna() : 누락값을 채우는데 사용함

data.fillna(method='bfill') or data.fillna(method='ffill')의 2가지 메소드를 사용한다

ffill은 forward-fill로,  이전 값으로 채우고 bfill은 back-fill의 다음 값으로 채운다

df

■ df.fillna(method='ffill', axis=0) / default axis는 마찬가지로 0이다

 

fillna(method='ffill', axis=0)

■ df.fillna(method='bfill', axis=0)

■ df.fillna('bfill'), method를 안 쓸 경우

    모든 누락데이터의 자리에 bfill을 채운다.

반응형

댓글