본문 바로가기

Python 코딩 모음

FutureWarning: Downcasting behavior in `replace` is deprecated and will be removed in a future version. To retain the old behavior, explicitly call `result.infer_objects(copy=False)`. To opt-in to the future behavior, set `pd.set_option('future.no_silent_

df.replace({None:np.nan},inplace=True)

※ 여기 작성된 오류 원인 및 해결 방법은 지극히 제가 개인적으로 겪은 경험을 바탕으로 작성한 내용입니다.

※ 아래 해결책은 google의 gemini의 도움을 받아 마련한 해결책입니다.

 

어느날 갑자기 아래와 같은 경고가 떴습니다.

FutureWarning: Downcasting behavior in `replace` is deprecated and will be removed in a future version. To retain the old behavior, explicitly call `result.infer_objects(copy=False)`. To opt-in to the future behavior, set `pd.set_option('future.no_silent_downcasting', True)`

 

해당 경고는 데이터프레임에서 'None' 값을 'nan' 값으로 바꾸려 넣어둔 아래 코드를 실행하는데 발생한 문제였습니다.

df.replace({None:np.nan},inplace=True)

 

확인해보니, 'None' 과 'np.nan'의 데이터 타입이 달라서 생기는 문제였고,

replace를 하기 전과 후의 데이터 타입을 일치시켜야 해당 경고가 나타나지 않는 것이었습니다.

float_columns # nan값과 같은 데이터 타입(float)으로 변경할 열 이름
            
# 이렇게 변환하면 None 값이 nan값으로 자연스럽게 바뀜
for col in float_columns:
	df[col] = pd.to_numeric(df[col], errors='coerce')

 

위와 같이 할 경우, 숫자로 변환할 수 없는 'None' 값이 'errors='coerce'' 옵션으로 자연스럽게 nan 값으로 바뀌었습니다.

 

꼭 위의 솔루션이 아니더라도, 변환전후 데이터 타입을 명확하게 일치시키면 해당 경고가 뜨지 않을 것으로 보입니다.