sklearn에서 missing value 처리하기 ( by pandas)

sklearn 에서 missing value 처리하기

실험에서 사용하는 데이터의 속성 필드 값이 비어있을 때

아래와 같은 에러 메세지를 확인할 수 있다.

Input contains NaN, infinity or a value too large for dtype(‘float64’).

sckit-learn 알고리즘은 기본적으로

모든 데이터가 다 값을 가지고 있을 거라 간주하기 때문에

비어있는 값을 발견하면 에러 메세지를 내고 종료를 한다.

이럴 경우 두 가지 방법 중 하나를 선택할 수 있다.

  • 비어있는 값을 가지고 있는 데이터를 제거 하거나 (데이터의 양이 충분한 경우)
  • 비어있는 값을 다른 값으로 치완할 수 있다.  (데이터가 부족하거나 아니면 그 데이터를 사용해서 실험을 해야 하는 경우)

각각의 케이스에 대해 어떻게 처리를 하는지 하나씩 확인해보겠다.

비어있는 값을 가지고 있는 데이터를 제거하는 것은

pandas 패키지의 dropna() 함수를 사용하면 간단하다.

아래는 read_csv 함수를 사용해서 임의의 csv 데이터를 읽어와서

pandas 의 dataframe으로 저장 후

dropna()함수를 사용해 본 예시이다.

dropna()를 사용하면 하나의 속성이라도

비어있는  열이 있으면  모두 드랍한다.

예시에서 사용한 데이터에는 중간 중간 비어있는 예시들이 많아서

dropna()를 사용하니

하나도 남아있는 데이터가 없었다 ; – ;

그럼 조건을 완화해서 함수 인자로 how=’all’을 지정하면

모든 속성이 다 비워져있는 열들만 삭제를 할 수 있다.

또는 N/A 값을 가질 수 있는 최소 개수를 thresh 인자로 명기할 수도 있다.

예시에서는 빈 값을 가질 수 있는 필드를 최소 2개 로 설정해 보았다.

조건에 맞는 데이터들이 노출되는 것을 확인 할 수 있다.

마지막으로 빈 값을 검사하는 필드 이름도 subset 인자로 지정할 수 있다.

사실 비어있는 데이터를 포함하고 있는 것은 지가지수 속성이었기 때문에

전체적으로 빈 값이 리턴되고 있다.

이 외 자세한 내용은 아래 pandas 웹 페이지를 확인 할 수 있다.

다음 포스팅에서는 빈 값을  다른 값으로 대체하는 방법을 확인해보겠다.

참고:  https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.dropna.html

댓글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다