작성
·
79
0
우선 판다스에서 데이터프레임 집계함수를 사용하면 숫자형 컬럼들만 자동으로 골라서 결과값을 보여주는 것으로 알고 있습니다. (제가 알고있는 것이 맞을까요??)
df = pd.DataFrame([[10, 10, 'a'], [20, 20, 'b'], [30, 30, 'c']], columns = ['A', 'B', 'C'])
df.mean()을 사용하면 A, B 컬럼만 자동으로 평균값을 출력해 줄 것이라 생각했는데
TypeError: Could not convert ['abc'] to numeric 에러가 나오네요
이유가 무엇일까요?
df = pd.DataFrame([[10, 10, '10'], [20, 20, '20'], [30, 30, '30']], columns = ['A', 'B', 'C'])
이렇게 문자형의 숫자가 들어간 경우에는 데이터타입은 1번과 동일하게 object 이지만 오류가 발생하지는 않네요. 대신 값이
A 20.0
B 20.0
C 34010.0
dtype: object
이런식으로 이상한 값이 출력됩니다. 이유가 무엇일까요?
추가로 object 타입의 컬럼에 숫자와 문자형이 동시에 들어가있는 경우(데이터가 깔끔하지 못해서)
TypeError: unsupported operand type(s) for +: 'int' and 'str' 이와같은 오류가 발생하는데요.
테이블의 크기가 큰 경우 info() 메소드를 통해 object 타입들을 일일이 확인해야 할 것 같은데
숫자와 문자형이 섞여있는 컬럼에서 각각의 원소 중 문자형으로 기입된 행만 추출하여 확인할 수 있는 방법은 없을까요?
답변 1
0
안녕하세요, 인프런 AI 인턴입니다.
성지님의 질문에 답변드리겠습니다.
판다스에서의 집계함수는 기본적으로 숫자형 데이터에 대해 연산을 수행합니다. 따라서 성지님의 이해가 맞습니다. df.mean()
을 실행했을 때 TypeError: Could not convert ['abc'] to numeric
에러가 발생한 이유는 판다스가 내부적으로 데이터 타입을 확인하면서 숫자형이 아닌 데이터(‘a’, ‘b’, ‘c’)에 대해 수치 연산을 시도하고, 이 과정에서 변환할 수 없다는 오류를 발생시킨 것으로 보입니다. 본래는 성지님의 예상처럼 ‘A’, ‘B’ 컬럼에 대한 평균값만 계산되어야 정상입니다. 이는 판다스 버전에 따라 처리 방식이 다를 수 있으니, 판다스 버전을 확인해볼 필요가 있습니다.
문자형의 숫자 데이터가 입력된 경우, 판다스는 이를 숫자로 변환하여 연산을 시도합니다. 그 과정에서 ‘C’ 컬럼의 데이터가 모두 숫자 문자열이기 때문에, 이를 실제 숫자로 간주하여 평균을 구하는데, 결과값이 이상하게 나온 것은 내부적으로 연산 과정에서 예상치 못한 변환 또는 처리가 이루어졌을 가능성이 있습니다. 정확한 원인 분석을 위해서는 추가적인 정보가 필요할 수 있습니다.
숫자와 문자형이 섞여 있는 컬럼에서 문자형으로 기입된 행만 추출하기 위해서는 판다스의 apply 함수와 lambda 함수를 이용할 수 있습니다. 예를 들어, ‘C’ 컬럼에 대해 다음과 같이 코드를 작성할 수 있습니다.
df[df['C'].apply(lambda x: isinstance(x, str))]
이 코드는 ‘C’ 컬럼에서 문자열 타입인 행만을 필터링하여 반환합니다. 따라서 숫자와 문자가 섞인 컬럼에서 문자형 데이터만을 추출할 수 있습니다.
판다스를 사용하실 때는 데이터 타입과 데이터 형태를 주의 깊게 확인하면서 작업하시는 것이 좋습니다. 추가적인 질문이 있으시면 언제든 문의해주세요.