빅데이터분석

[파이썬] 파이썬 입문 데이터분석 프로젝트 만들기 - (15) 데이터타입 확인/변경 .astype(), to_numeric()

모닥불🔥 2024. 5. 29. 03:32

사진을 클릭하면 링고선생님의 파이썬 데이터분석 프로젝트 강의를 수강할 수 있다.

이번 글 내용은 강의자료 3-10에 속한다. 데이터 타입을 확인, 변경하는 부분은 빅분기 실기에서도 필수적으로 나오는 부분이니 잘 정리해 두면 도움이 될 듯..


🔥 강의 목차

오리엔테이션
파이썬 기초 문법
데이터 전처리
데이터 시각화
마케팅 데이터 분석 및 지표 정의하기

🔥 데이터타입 변경 df.astype()

데이터타입 설명
object 텍스트 또는 혼합 데이터 타입(주로 문자열)
int64 정수형 데이터
float64 부동소수점 숫자
bool True / False 참/거짓
datetime64 날짜 및 시간 데이터
category 범주형 데이터

 

표에서처럼, 데이터는 다양한 타입으로 존재하는데, 상황에 맞게 데이터 타입을 변경할 수 있어야 한다. df.astype()으로 데이터 타입을 변경할 수 있다.

 

import pandas as pd
data = {'A': ['1', '2', '3'],
        'B': ['4.5', '5.6', '6.7'],
        'C': ['True', 'False', 'True']}
df = pd.DataFrame(data)
df

 

예를 들어, 위 예시와 같이 데이터를 생성한다면 A,  B, C 컬럼의 데이터 타입은 무엇일까?

정답은 모두 object이다. 이유는 숫자든 True/False든 전부 '따옴표'로 감쌌기 때문!

 

내가 원하는 계산/분석 결과를 얻기 위해서는 반드시 데이터 타입을 올바르게 설정해야 한다. (숫자 1+2+3 의 결과는 6이지만, 문자 '1'+'2'+'3'='123'이다.) 그럼 데이터타입을 변경하려면 어떻게 해야 할까? 데이터프레임 혹은 원하는 컬럼에 .astype(원하는 데이터타입)을 적으면 된다. 단, 변경된 데이터타입을 다시 동일한 컬럼에 저장해야 데이터프레임에 확실히 반영이 된다는 것에 주의!

* 이런 타입 변경 등을 하고 나면 반드시 df.info()로 변경 사항을 확인하자. 

df['A'] = df['A'].astype(int) # A 컬럼을 int형으로 변경하고, A컬럼에 다시 저장
df.info()

 

나머지 컬럼도 원하는 데이터타입을 괄호 안에 넣어 변경할 수 있다.

df['B'] = df['B'].astype(float)
df['C'] = df['C'].astype(bool)
df.info()

 

🔥 to_numeric()

데이터를 계산/분석하기 위해 문자열(object) 혹은 다른 데이터타입 형태를 '숫자형 데이터'로 변환해야 할 때가 있다.

'123', '3.14'와 같이 따옴표 안에 있어 문자열에 속하더라도 to_numeric()을 사용하면 숫자 123과 3.14로 변경해준다. 만약에 데이터 중에 글자로 구성된 문자열이 있으면 숫자로 변경할 수 없기 때문에 NaN으로 처리한다.

import pandas as pd

# numeric valeu 와 non-numeric value가 혼재된 상황
data = {'Value': ['10', '20', '30', 'error', '50',10]}
df = pd.DataFrame(data)

 

위 데이터프레임을 생성하면 'value' 컬럼의 데이터타입은 object 이다. 숫자와 문자가 섞여 있기 때문!

하나 하나 뜯어서 보면,

따옴표가 있는 '10', '20', '30', 'error', '50' 은 문자열이고, 10은 숫자이다.

여기에서 숫자로 변경할 수 있는 문자열은 '10', '20', '30', '50'이고, 변경할 수 없는 문자열은 'error'이다.

pd.to_numeric(df['Value'], errors = 'coerce')

 

이렇게 변경하면 'error'는 NaN으로 변경되고, 나머지는 숫자로 바뀐다. 데이터타입은 flaot인 것을 함께 확인하자.

to_numeric()을 사용하기 전, 몇 가지 확인할 부분이 있다.

  • to_numeric()은 판다스 라이브러리에 있는 함수이므로, 사용하기 위해서는 반드시 코드 상단에 import pandas as pd를 입력해야 한다.
  • to_numeric()은 데이터프레임이 아닌, '시리즈' 형태에만 적용되는 함수이므로 단일 컬럼을 뽑아서 사용해야 한다.
  • 에러 처리 방식을 지정할 수 있는데, errors = 'coerce' 로 지정하면 에러를 NaN으로 변경하여 진행한다.

astype()에서도 괄호 안에 errors = 'ignore' 옵션을 넣어 오류를 무시하고, 원하는 모든 타입으로 변경 가능하다.

 

단, 위 데이터의 경우 astype(float, errors = 'ignore')로 타입을 변경하면 문자열 'error'는 NaN으로 변경되지 않고 무시되어 'error' 그대로 출력된다. astype()은 에러처리 옵션으로 raise(에러 발생) / ignore(오류 무시) 두 가지만 제공한다.

 

또 하나 주목할 것은, 데이터타입을 float로 아무리 변경해도 문자가 섞여 있으므로 'object'로 출력된다는 점이다. 그러면 아무 의미 없는 시도인 것 같지만 kimpandas블로그에 따르면 반복문으로 사용 가능하기 때문에 유용하다고 한다.

 

위 내용은 아래 블로그를 참고해 정리했다. https://kimpanda.tistory.com/63

 

[pandas] 숫자로 바꿀 때 to_numeric과 astype의 차이

곧 출판될 판다스 책의 원고 초안으로 to_numeric과 astype의 차이에 대한 강의영상을 만들었습니다 원고 초안은 강의 아래에 공개합니다 6.3.2 수치형 데이터로 변환하기 to_numeric astype은 모든 자료형

kimpanda.tistory.com

 

 

* 본 게시글은 '메타코드'의 동의를 받아 작성된 글로, 강의 내용에 대한 모든 저작권은 Ringo 선생님에게 있습니다. 개인용도의 학습 외에 무단사용은 엄격히 금지됩니다. 위반 시 법적 조취가 취해질 수 있습니다.

* 일부 내용은 kimpandas 티스토리 블로그를 참고하였으며, 출처를 명확히 표기하였습니다.