파이썬 inf 확인 - paisseon inf hwag-in

코드 예제

팬더 데이터 프레임 inf 교체

df.replace([np.inf, -np.inf], np.nan)

nan 및 infs 파이썬 제거

df.replace([np.inf, -np.inf], np.nan).dropna(axis=1)

비슷한 페이지

예제가있는 유사한 페이지

다른 언어로

이 페이지는 다른 언어로되어 있습니다

empty row

..................................................................................................................

..................................................................................................................

..................................................................................................................

..................................................................................................................

..................................................................................................................

..................................................................................................................

..................................................................................................................

..................................................................................................................

..................................................................................................................

..................................................................................................................

..................................................................................................................

..................................................................................................................

..................................................................................................................

..................................................................................................................

..................................................................................................................

..................................................................................................................

이 카테고리에서 인기

카테고리에 예제가 포함 된 인기있는 페이지

empty row

프로그래밍/Python

[Python] DataFrame np.inf, -np.inf 처리하기

엔지니어 2021. 3. 31. 00:17

Python Pandas 패키지의 DataFrame을 사용하다 보면

데이터프레임의 값이 np.inf 또는 -np.inf로 채워진 경우가 있습니다.

  • inf : Infinitie (무한)을 의미

np.inf, -np.inf어떤 사칙연산을 수행해도 np.inf or -np.inf 로만 변환되기에

코드에서 종종 오류 일으킵니다.

이때 DataFrame.replace 메서드로 간단하게 np.inf, -np.inf를 None값으로 대체할 수 있습니다.

import pandas as pd
import numpy as np
df = pd.DataFrame([1000, 2000, 3000, -4000, np.inf, -np.inf])
print("Original DataFrame:")
print(df)

print("Removing infinite values:")
df = df.replace([np.inf, -np.inf], np.nan) # replace 메서드로 np.inf를 None(np.nan)으로 변경
print(df)
======= Output ======
>>>
Original DataFrame:
        0
0  1000.0
1  2000.0
2  3000.0
3 -4000.0
4     inf
5    -inf
Removing infinite values:
        0
0  1000.0
1  2000.0
2  3000.0
3 -4000.0
4     NaN
5     NaN

혹시 궁금하신 사항은 댓글 남겨주세요.

감사합니다.

1. w3resource, [Pandas: Remove infinite values from a given DataFrame], https://www.w3resource.com/python-exercises/pandas/python-pandas-data-frame-exercise-52.php
2. pandas 공식문서, [pandas.DataFrame.replace], https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.replace.html

Python 에 서 는 다음 과 같은 방식 으로 플러스 와 마이너스 가 무한 하 다 는 것 을 잘 알 고 있 습 니 다.


float("inf") #    
float("-inf") #    

이용inf(infinite)에 0 을 곱 하면 얻 을 수 있다not-a-number(NaN).만약 하나의 수가 인 피 니 트 를 초과 한다 면,그것 은 하나의NaN(not a number)수 이다.NaN 수 에서 그의 exponent 부분 은 표현 가능 한 최대 치,즉 FF(단일 정밀도),7FF(이중 정밀도)와 7FFF(이중 정밀도 확장)입 니 다.NaN 수 와 infinite 수의 차 이 는 infinite 수의 significant 부분 은 0 값(두 정밀도 의 bit 63 위 를 1 로 확장)이다.반면 NaN 수의 significant 부분 은 0 값 이 아니다.
우 리 는 먼저 다음 과 같은 코드 를 봅 시다.


>>> inf = float("inf")
>>> ninf = float("-inf")
>>> nan = float("nan")
>>> inf is inf
True
>>> ninf is ninf
True
>>> nan is nan
True
>>> inf == inf
True
>>> ninf == ninf
True
>>> nan == nan
False
>>> inf is float("inf")
False
>>> ninf is float("-inf")
False
>>> nan is float("nan")
False
>>> inf == float("inf")
True
>>> ninf == float("-inf")
True
>>> nan == float("nan")
False

Python 에서 부동 소수점 이 NaN 인지 아 닌 지 를 판단 해 보지 않 았 다 면 이상 의 출력 결과 에 의아해 할 것 이다.우선,플러스 마이너스 무한 과 NaN 자체 와 자신 이 is 로 조작 한 결과 모두 True 이 고 여 기 는 문제 가 없 는 것 같 습 니 다.그러나==으로 조작 하면 결 과 는 달 라 졌 고,낸 은 이때 False 가 됐다.각각 float 로 변 수 를 다시 정의 하여 is 와==을 비교 하면 결 과 는 여전히 예상 밖 이다.이런 상황 이 발생 한 원인 은 약간 복잡 하 니,여 기 는 군더더기 가 없 으 니,관심 이 있 으 면 관련 자 료 를 찾 아 볼 수 있다.
inf 와 Nan 값 을 정확하게 판단 하려 면 math 모듈math.isinf math.isnan 함 수 를 사용 해 야 합 니 다.


>>> import math
>>> math.isinf(inf)
True
>>> math.isinf(ninf)
True
>>> math.isnan(nan)
True
>>> math.isinf(float("inf"))
True
>>> math.isinf(float("-inf"))
True
>>> math.isnan(float("nan"))
True

이렇게 하면 틀림없다.내 가 이 문 제 를 이야기 하고 있 는 이상 파 이 썬 에서 is 와==로 대상 이 플러스 마이너스 나 NaN 인지 아 닌 지 를 판단 하려 고 하지 말 라 고 충고 하 는 것 이다.너 는 순 순 히 math 모듈 을 사용 해라,그렇지 않 으 면 불 에 타 는 것 이다.
물론 다른 방법 으로 판단 할 수도 있 습 니 다.다음은 NaN 으로 예 를 들 지만 헷 갈 리 지 않도록 math 모듈 을 사용 하 는 것 을 추천 합 니 다.
대상 자체 로 자신 을 판단 하 다.


>>> def isnan(num):
...  return num != num
... 
>>> isnan(float("nan"))
True

numpy 모듈 함수 로


>>> import numpy as np
>>> 
>>> np.isnan(np.nan)
True
>>> np.isnan(float("nan"))
True
>>> np.isnan(float("inf"))
False

Numpy 의 isnan 함 수 는 전체 list 를 판단 할 수 있 습 니 다.


>>> lst = [1, float("nan"), 2, 3, np.nan, float("-inf"), 4, np.nan]
>>> lst
[1, nan, 2, 3, nan, -inf, 4, nan]
>>> np.isnan(lst)
array([False, True, False, False, True, False, False, True], dtype=bool)

여기np.isnan 는 불 값 배열 을 되 돌려 줍 니 다.해당 위치 가 NaN 이면 True 로 돌아 갑 니 다.그렇지 않 으 면 False 로 돌아 갑 니 다.
총결산
이상 은 이 글 의 전체 내용 입 니 다.본 논문 의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 도움 이 되 기 를 바 랍 니 다.궁금 한 점 이 있 으 면 댓 글 을 남 겨 주 십시오.