더북(TheBook)

5.1.4 결측 값 다루기

 

때로는 데이터를 사용하기 전에 데이터를 정제해야 할 때도 있다. 예를 들어 데이터 값이 null이거나 아예 비어 있거나, 또는 결측 값에 준하는 문자열 상수(예: N/A 또는 unknown)를 데이터에 포함하기도 한다. 이때는 DataFramena 필드로 제공되는 DataFrameNaFunctions를 활용해 결측 값이 있는 데이터 인스턴스를 적절하게 처리할 수 있다. 결측 값을 처리하는 방식은 각자 활용하는 방법에 따라 다를 것이다. 보통은 null 또는 NaN(Not a Number를 뜻하는 스칼라 상수) 등 결측 값을 가진 로우를 DataFrame에서 제외하거나 결측 값 대신 다른 상수를 채워 넣거나 결측 값에 준하는 특정 칼럼 값을 다른 상수로 치환하는 방법을 사용한다.

이 세 가지 방법을 실제로 적용하는 방식도 다양하다. 예를 들어 다음과 같이 drop 메서드를 인수 없이 호출하면 최소 칼럼 하나 이상에 null이나 NaN 값을 가진 모든 로우를 DataFrame에서 제외할 수 있다.

scala> val cleanPosts = postsDf.na.drop()
scala> cleanPosts.count()
res0: Long = 222

 

drop("any")를 호출해도 같은 결과를 얻을 수 있다. 여기서 any는 어떤 칼럼에서든 null 값을 발견하면 해당 로우를 제외하라는 의미다. 반면 drop("all")을 호출하면 모든 칼럼 값이 null인 로우만 제외한다. 물론 drop 함수에 특정 칼럼들을 지정할 수도 있다. 예를 들어 다음 코드는 채택된 답변 ID가 없는 포스트를 DataFrame에서 제외한다.13

postsDf.na.drop(Array("acceptedAnswerId"))

 

13 역주 이 코드 또한 DataFrame의 결측 값들을 수정하는 것이 아니라, 결측 값을 처리한 새로운 DataFrame을 반환한다. 그러나 na.drop메서드의 반환 값을 변수에 할당하지 않았으므로 변경된 DataFrame은 버린다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.