내용
결측치와 무한값찾기
이터 처리 과정에서 누락된 값이나 계산과정에서 무한값을 얻게되는 경우가 있는데 이러한 값들은 이어진 계산과정에서 에러를 발생하는 경우가 많습니다. 그러므로 분석 전 또는 분석 동안 이들의 처리 과정이 중요하며 그 일환으로 먼저 그들의 인식과정을 먼저 살펴봅니다.
결측값과 무한값 생성
numpy의 속성값인 np.nan
으로 결측치(nan(Not Any Number))를 인위적으로 생성할 수 있습니다.또한 무한값은 내장함수인 float()
를 사용하여 생성할 수 있습니다.
import math import numpy as np import pandas as pd
x=np.random.rand(20) x
array([0.44245459, 0.8178457 , 0.19687037, 0.54456459, 0.2971784 , 0.9188978 , 0.37880048, 0.10845443, 0.84552398, 0.73500799, 0.8996776 , 0.38032666, 0.15925506, 0.70421241, 0.46348431, 0.76245393, 0.25619259, 0.92892586, 0.11489276, 0.51422256])
# 특정한 요소들을 nan 또는 infinity로 치환 x[3]=np.nan #nan x[9]=np.nan x[7]=float('inf') #inifinity x[16]=float('-inf') #-infintiy np.around(x, 4)
array([0.4425, 0.8178, 0.1969, nan, 0.2972, 0.9189, 0.3788, inf, 0.8455, nan, 0.8997, 0.3803, 0.1593, 0.7042, 0.4635, 0.7625, -inf, 0.9289, 0.1149, 0.5142])
결측값과 무한값 결정
위의 자료에서 nan과 inf, -inf를 결정합니다.
math.isfinite(값)
: 객체의 각 요소 단위로 NaN 또는 Infinity가 아닐 경우 True를 반환한다.np.isfinite(array객체)
: 객체 또는 요소에 위의 math.isfinite와 같은 결과를 반환
math.isfinite(x[3])
False
np.isfinite(x[3])
False
x1=np.isfinite(x) x1
array([ True, True, True, False, True, True, True, False, True, False, True, True, True, True, True, True, False, True, True, True])
위의 객체에서 False 부분이 nan과 infinity이므로 이들의 인덱스를 알아보기 위해 np.where(condition)
를 적용합니다. 이 함수는 배열객체 또는 DataFrame, Series 객체에 대해 지정한 조건에 맞는 부분의 인덱스를 반환 합니다.
np.where(x1==False)
(array([ 3, 7, 9, 16]),)
무한값 결정
- math.isinf(x): 원소단위 infinity일 경우 True
- np.isinf(array 객체): 객체의 각 원소를 판단하여 infinity일 경우 True
x2=[math.isinf(i) for i in x] print(x2, end="")
[False, False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, True, False, False, False]
위 객체 x2는 리스트이므로 .index(인수) 메서드를 사용하여 대상의 인덱스를 찾을 수 있다. 그러나 이 함수는 객체 중 대상과 일치하는 첫부분만을 반환한다.
x2.index(True)
7
대상에 적합한 모든 값들을 찾기 위해서는 배열 객체로 전환한 후 np.where()
를 적용합니다.
p.isinf(x)
array([False, False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, True, False, False, False])
np.where(np.isinf(x))
(array([ 7, 16]),)
numpy 모듈은 양의 무한값(positive infinity)와 음의 무한값(negative infinity)를 구별한다.
- np.isposinf(array객체 또는 원소): 양의 무한값이면 True
- np.isneginf(array객체 또는 원소): 음의 무한값이면 True
np.where(np.isposinf(x)) # = np.inf
(array([7]),)
np.where(np.isneginf(x)) # = -np.inf
(array([16]),)
Nan 결정
결측값 nan은 다음 함수로 결정할 수 있습니다.
- math.isnan():요소 단위로 nan이면 True를 반환
- np.isnan(): 객체의 전체와 요소별로 nan인 경우 True를 반환
x3=[math.isnan(i) for i in x] print(x3, end="")
[False, False, False, True, …, False, False, False, False]
x3.index(True)
3
np.isnan(x)
array([False, False, False, True, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False])
np.where(np.isnan(x))
(array([3, 9]),)
댓글
댓글 쓰기