ERROR
[Python] invalid literal for int() with base 10: '' 해결
웅덩이
2022. 11. 21. 00:50
데이터를 전처리 하는데 저 오류를 만났다...
내가 하려고 했던 연산은 각 칼럼의 값을 모두 더하여 새로운 칼럼을 만드는 것이었다.
그리고 연산을 했을 때 invalid literal for int() with base 10: '' 오류가 뜨길래 데이터 타입을 확인해본 결과,
음 col1과 col3이 object형으로 되어있었다. 평소처럼 astype을 이용하여 형 변환을 시도하였다.
df['col1'].astype('float')
df['col3'].astype('float')
#######################################
df.astype({'col1': 'int','col3':'int'})
.....행복하다ㅎ...새로운 방법을 찾아 나설 수 있는.. 기회를 주시다니.........
왜 형 변환이 안되는 것인지 답답해서 머리를 쥐어 뜯었다.
ㅋㅋㅋㅋㅋㅋㅋㅋ저 위 아래가 같은 명령인걸 알고 있지만 설마 하는 마음에 이것 저것 해보았다...
float으로도 해보고 int로도 해보고 한꺼번에 해보고 따로해보고
그렇게 이걸로는 해결할 수 없겠다는 생각이 들어 구글을 타고 다니다 새로운 방법을 발견하였다.
pd.to_numeric 이다..!
df['col1'] = pd.to_numeric(df['col1'])
dtype을 확인해보니 float형으로 바뀌었다..!!
이러한 불상사가 또 일어날 수 있기 때문에 함수로 만들어 두었다.
def str_to_float(df, *numDictCol):
for col in numDictCol:
df[col] = pd.to_numeric(df[col],errors='coerce')
return df
errors = 'coerce' 옵션은 numeric 형이 아닌 데이터는 NAN값으로 바꾸어주는 것이다!
연산까지 완벽하게 할 수 있었다.
저번에 pd.to_datetime 으로 날짜형 손 봤을 때도 신세계였는데, pd.to_numeric이라니... 한줄기빛🌟