[Error] "Cannot convert non-finite values (NA or inf) to integer"

썹스·2024년 3월 22일

Error

목록 보기
2/2

🚨 에러 발생

구글 코랩 환경에서 실수형(float type) 데이터를 정수형(int type)으로 변환하려는 과정에서 아래와 같은 에러가 발생했다.

"Cannot convert non-finite values (NA or inf) to integer"

에러 내용을 해석해 보면 변환하려는 칼럼에 결측값(NULL/NA) 또는 무한대 값(Inf)이 존재하기 때문에 변환할 수 없다는 내용이다.

변환하려는 칼럼은 무한대 값이 존재할 수 없기 때문에 무한대 값(inf) 아닌 결측값(NULL/NA)이 에러의 원인으로 추측했다.

✅ 에러 해결

구글에 검색해 본 결과 다양한 블로그에서 아래와 같은 방법을 쉽게 찾을 수 있었다.

NULL 값을 -1로 치환 -> 데이터 타입 변경 -> -1로 치환한 데이터를 다시 NULL로 변환

import numpy as np
df.xxx = df.xxx.fillna(-1).astype('Int64').replace({-1: np.nan})

하지만 위의 방법으로 실수를 정수로 변환 할 수 없어서 다른 방법을 찾아 보던 중 to_numeric() 메서드를 발견했다.

to_numeric() 메서드는 판다스에서 제공하는 데이터 타입 변환 메서드로 오류에 대한 대처가 다양했다.

to_numeric() 메서드 기본 문법

to_numeric(df.xxx, errors=raise, downcast=None)
  • errors
    • raise(기본값): 오류를 발생시킵니다.
    • coerce: 변환할 수 없는 값을 NaN으로 변환합니다.
    • ignore: 변환할 수 없는 값을 그대로 유지합니다.

나는 NULL 값을 유지한 채로 데이터 타입을 변환하고 싶어서 아래와 같이 코드를 작성해 보았다.

df.xxx = pd.to_numeric(df.xxx, errors='coerce').astype('Int64')
profile
코린이

0개의 댓글