
구글 코랩 환경에서 실수형(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')