[TIL]DataFrame_ValueError: could not convert string to float: 'None' 해결

차보경·2023년 2월 22일
1

TIL

목록 보기
29/37
post-thumbnail
post-custom-banner

🚨문제상황

  • 숫자 + None값으로 이루어진 DataFrame의 평균값을 구하기 위해서 float형식으로 변경하려고 하는데,
    ValueError: could not convert string to float: 'None'이 발생해서 오류 발생
  • 포함된 데이터의 형태만 보면 영락없는 flaot 형식이지만

    실제 뜯어보면 안에 None이 있어 object의 형식인걸 알 수 있다.

오류 발생 Code

image_df['area'] = image_df['area'].astype(float)

  • 이미 이전에도 숫자 + 공란인 데이터를 처리한 경험에 따라 상기 코드를 사용해서 float로 변경하려고 했다.
    응 안돼~^_^

므ㅏ.... 그땐 맞고 지금은 틀리다..?
무슨 차이인지 확인해보니 예전에 만들었던 df은 공백이 생긴 이유가 df.transpose()로 인해 생겨서 None이 아닌 NaN값으로 되어있었다.

🤔 그래서 어떻게 했는데?

  • ㅎ.. 방법은 간단했다.
image_df['area'] = pd.to_numeric(image_df['area'], errors='coerce')
print(image_df.dtypes)

pd.to_numeric()에 대해 더 알아보쟈

  • 예전에 공부했던 숫자형식 numeric이라 반가웠다ㅋㅋㅋㅋ 관련 글
  • 보면 기본적으로 float64 or int64 형식으로 변경해주고 downcast라는 파라미터를 통해 float32, int8 등으로 변경가능하다고 한다.
  • (df, errors='ignore')를 사용하면 numeric이 아닌 경우, 무시한다.
    • 내 경우, numeric이 아닌 None은 그대로 None으로 출력되어 전체 형식은 Object가 된다.
  • (df, errors='coerce')를 사용하면 numeric이 아닌 경우, NaN값으로 변경한다.
    • 내가 사용한 것으로, NoneNaN으로 처리되어 전체 데이터는 float으로 변경된다.

좋은 함수다...👍👍

profile
차보의 Data Engineer 도전기♥ (근데 기록을 곁들인)
post-custom-banner

1개의 댓글

comment-user-thumbnail
2023년 12월 21일

선생님 감사합니다. 덕분에 퇴근합니다..

답글 달기