Python Pandas 패키지의 DataFrame을 사용하다 보면 데이터프레임의 값이 np.inf 또는 -np.inf로 채워진 경우가 있습니다.
np.inf, -np.inf는 어떤 사칙연산을 수행해도 np.inf or -np.inf 로만 변환되기에 코드에서 종종 오류를 일으킵니다. 이때 DataFrame.replace 메서드로 간단하게 np.inf, -np.inf를 None값으로 대체할 수 있습니다.
혹시 궁금하신 사항은 댓글 남겨주세요. 감사합니다. 1. w3resource, [Pandas: Remove infinite values from a given DataFrame], https://www.w3resource.com/python-exercises/pandas/python-pandas-data-frame-exercise-52.php
python에서 값들을 다루다보면 inf 또는 NaN 인 경우가 발생할 수도 있는데요. 오늘은 어떻게 변수의 inf 또는 NaN 여부 확인방법을 알아보겠습니다. 여기서 잠깐!inf, NaN 이 무엇인지 모르신다고요? 그럼 다음 글을 먼저 봐주세요. 2018/06/29 - [개발/Python] - [Python/기초] What is inf and nan? inf 여부 확인방법변수에[ float('inf') ] 값이 담겨있다면? 간단한 방법으로는 math package의 isinf() 함수를 이용해주면 됩니다. import math x = float('inf') math.isinf(x) isinf() 함수에 정의된 설명을 살펴보면 다음과 같이 쓰여있습니다. Check if the float x is infinite (positive or negative). - float x 의 값이 inf 또는 -inf 인지 여부를 확인하는 함수이다. New in version 2.6 NaN 여부 확인방법어떤 변수에 다음과 같은 값 [ float('nan') ]이 담겨 있을 때, 예외처리를 해줄 필요가 종종 있을텐데요. * 변수가 NaN 이라는것은 Not A Number를 의미하며, 숫자가 아니기 때문에 어떠한 수학적 연산을 할 수 없다는 것을 의미합니다. 간단한 방법으로는 math package의 isnan() 함수를 이용해주면 됩니다. import math x = float('nan') math.isnan(x) isnan() 함수에 정의된 설명을 살펴보면 다음과 같이 쓰여있습니다. Check if the float x is a NaN (not a number). - float x 의 값이 NaN 인지 여부를 확인하는 함수이다. New in version 2.6 추가적으로 math package의 isnan()을 이용하지 않고도 자기자신과 비교해 같은지 여부를 확인하는 방법으로도 NaN 여부를 확인할 수 있습니다. def isNaN(num): return num != num 흥미로운 내용NaN 및 inf 가 어떤 history를 가지고 있는지에 대한 자세한 내용은 PEP754 에 명시돼 있네요. https://www.python.org/dev/peps/pep-0754/ 참 간단하죠? 그럼 지금까지 inf, NaN 여부를 어떻게 확인하는지를 설명하는 글이었습니다. dropna, fillna, inf, NAN, np.inf, np.nan, pandas, Python, replace
저작자표시 비영리 변경금지 '우리는 개발자 > Data Science' 카테고리의 다른 글
NAME PASSWORD HOMEPAGE SECRET 내용
결측치와 무한값찾기이터 처리 과정에서 누락된 값이나 계산과정에서 무한값을 얻게되는 경우가 있는데 이러한 값들은 이어진 계산과정에서 에러를 발생하는 경우가 많습니다. 그러므로 분석 전 또는 분석 동안 이들의 처리 과정이 중요하며 그 일환으로 먼저 그들의 인식과정을 먼저 살펴봅니다. 결측값과 무한값 생성 numpy의 속성값인 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(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(x1==False) (array([ 3, 7, 9, 16]),) 무한값 결정
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 대상에 적합한 모든 값들을 찾기 위해서는 배열 객체로 전환한 후 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.where(np.isposinf(x)) # = np.inf (array([7]),) np.where(np.isneginf(x)) # = -np.inf (array([16]),) Nan 결정결측값 nan은 다음 함수로 결정할 수 있습니다.
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]),) |