데이터 분석을 하다 보면 결측치(NaN)뿐만 아니라 무한대(inf) 값도 함께 처리해야 하는 경우가 많습니다. 이번 글에서는 Pandas DataFrame에서 무한대 값이 포함된 행의 인덱스를 확인하고 표시하는 방법을 알아보겠습니다.
핵심은 NumPy의 isinf() 함수와 Pandas의 any() 메서드를 조합하는 것입니다. 먼저 필요한 라이브러리를 별칭과 함께 임포트합니다.
import pandas as pd
import numpy as np1. 무한대 값이 포함된 데이터 준비
리스트로 구성된 딕셔너리를 만들고, NumPy의 np.inf를 사용해 무한대 값을 넣어줍니다.
d = { "Reg_Price": [7000.5057, np.inf, 5000, np.inf, 9000.75768, 6000, 900, np.inf] }위 딕셔너리를 기반으로 DataFrame을 생성합니다.
dataFrame = pd.DataFrame(d)2. 무한대 값이 있는 행 인덱스 구하기
np.isinf()는 각 요소가 무한대인지 여부를 불리언(Boolean)으로 반환하며, any(1)(axis=1)은 한 행이라도 True가 존재하면 True를 반환합니다. 이 결과를 인덱싱에 활용하면 무한대 값이 포함된 행의 인덱스를 손쉽게 얻을 수 있습니다.
indexNum = dataFrame.index[np.isinf(dataFrame).any(1)]전체 예제 코드
import pandas as pd
import numpy as np
# 리스트로 구성된 딕셔너리
d = { "Reg_Price": [7000.5057, np.inf, 5000, np.inf, 9000.75768, 6000, 900, np.inf] }
# 딕셔너리로 DataFrame 생성
dataFrame = pd.DataFrame(d)
print("DataFrame...\n", dataFrame)
# 무한대 값 개수 확인
count = np.isinf(dataFrame).values.sum()
print("\n무한대 값 개수...\n", count)
# 무한대 값이 있는 행 인덱스 추출
indexNum = dataFrame.index[np.isinf(dataFrame).any(1)]
print("\n무한대 값이 포함된 행 인덱스...\n", indexNum)실행 결과
DataFrame...
Reg_Price
0 7000.505700
1 inf
2 5000.000000
3 inf
4 9000.757680
5 6000.000000
6 900.000000
7 inf
무한대 값 개수...
3
무한대 값이 포함된 행 인덱스...
Int64Index([1, 3, 7], dtype='int64')실행 결과를 보면 전체 데이터 중 무한대 값은 총 3개이며, 해당 값들은 인덱스 1, 3, 7번째 행에 위치하고 있음을 확인할 수 있습니다. 이처럼 isinf()와 any()를 조합하면 대용량 데이터에서도 무한대 값의 위치를 빠르게 파악할 수 있습니다.