본문 바로가기
Python/Pandas

pandas dataframe ValueError (invalid literal for int() with base 10) 오류 해결하기

by PySun 2023. 10. 13.
반응형

판다스(Pandas) DataFrame을 사용할 때 "ValueError" 에러가 발생하는 상황과 이를 해결하기 위한 여러 가지 방법에 대해 설명하겠습니다. "ValueError"는 데이터를 변환하려고 할 때 데이터가 잘못된 형식이거나 변환할 수 없는 형식인 경우 발생하는 오류입니다.

상황 1: 문자열을 정수로 변환 시 ValueError

import pandas as pd

data = {'숫자열': ['1', '2', '3']}

df = pd.DataFrame(data)

# 문자열을 정수로 변환하려고 시도하여 ValueError 발생
df['숫자열'] = df['숫자열'].astype(int)

이 경우, '숫자열' 열의 데이터는 문자열 형태이기 때문에 정수로 변환하려고 시도하면 ValueError가 발생합니다.

해결 방법 1: 문자열을 정수로 변환

데이터를 올바른 형식으로 변환하세요.

import pandas as pd

data = {'숫자열': ['1', '2', '3']}

df = pd.DataFrame(data)

# 문자열을 정수로 변환
df['숫자열'] = df['숫자열'].astype(int)

상황 2: 부동 소수점 숫자를 정수로 변환 시 ValueError

import pandas as pd

data = {'숫자열': [1.0, 2.5, 3.7]}

df = pd.DataFrame(data)

# 부동 소수점 숫자를 정수로 변환하려고 시도하여 ValueError 발생
df['숫자열'] = df['숫자열'].astype(int)

이 경우, '숫자열' 열의 데이터는 부동 소수점 숫자이기 때문에 정수로 변환하려고 시도하면 소수점 이하 정보가 손실되기 때문에 ValueError가 발생합니다.

해결 방법 2: 부동 소수점 숫자를 정수로 변환 (정수로 변환 가능한 경우만)

부동 소수점 숫자를 정수로 변환하려는 경우에는 주의해야 합니다. 정수로 변환 가능한 경우에만 변환하세요.

import pandas as pd

data = {'숫자열': [1.0, 2.5, 3.7]}

df = pd.DataFrame(data)

# 정수로 변환 가능한 경우에만 변환
df['숫자열'] = df['숫자열'].astype(int, errors='ignore')

상황 3: 변환 불가능한 문자열을 정수로 변환 시 ValueError

import pandas as pd

data = {'숫자열': ['one', 'two', 'three']}

df = pd.DataFrame(data)

# 변환 불가능한 문자열을 정수로 변환하려고 시도하여 ValueError 발생
df['숫자열'] = df['숫자열'].astype(int)

이 경우, '숫자열' 열의 데이터는 정수로 변환할 수 없는 문자열이기 때문에 ValueError가 발생합니다.

해결 방법 3: 변환 가능한 데이터만 변환

변환 가능한 데이터만 변환하고 변환 불가능한 데이터는 유지하세요.

import pandas as pd

data = {'숫자열': ['one', 'two', 'three']}

df = pd.DataFrame(data)

# 변환 가능한 데이터만 변환
df['숫자열'] = pd.to_numeric(df['숫자열'], errors='coerce')

ValueError는 주로 데이터 유형 변환 시 데이터가 잘못된 형식이거나 변환할 수 없는 경우에 발생합니다. 따라서 데이터를 변환하기 전에 데이터 유형을 확인하고 변환 가능한 경우에만 변환하도록 주의해야 합니다.

반응형