자료형 다루기
자료형 변환은 데이터 분석 과정에서 반드시 알아야 하는 요소 중 하나이다. 예를 들어 카테고리는 문자열로 변환해야 데이터 분석을 수월하게 할 수 있다. 또 다은 예는 전화번호는 보통 숫자로 저장한다. 하지만 전화번호로 평균을 구하거나 더하는 등의 계산은 거의 하지 않는다. 오히려 문자열처럼 다루는 경우가 더 많다.
데이터를 준비하자.
import pandas as pd
import seaborn as sns
tips = sns.load_dataset("tips")
자료형을 변환하려면 astype 메서드를 사용하면 된다. 다음은 astype 메서드를 사용해 sex 열의 데이터를 문자열로 변환하여 sex_str이라는 새로운 열에 저장한 것이다.
tips['sex_str'] = tips['sex'].astype(str)
print(tips.dtypes)
자료형이 변환된 데이터를 다시 원래대로 만들 수 있다.
tips['total_bill'] = tips['total_bill'].astype(str)
print(tips.dtypes)
print()
tips['total_bill'] = tips['total_bill'].astype(float)
print(tips.dtypes)
잘못 입력한 데이터 처리하기
만약 데이터를 잘못 입력하면 자료형이 달라질 수 있다.
tips_sub_miss = tips.head(10)
tips_sub_miss.loc[[1, 3, 5, 7], 'total_bill'] = 'missing'
print(tips_sub_miss)
print()
print(tips_sub_miss.dtypes)
missing이 문자열이라 자료형이 object로 설정되었다.
이를 astype으로 float으로 바꿀 수 없다. to_numeric 메서드를 사용해도 문자열을 실수로 변환할 수 없다.
하지만 errors 인자를 지정하면 오류를 어느 정도 제어할 수 있다.
tips_sub_miss['total_bill'] = pd.to_numeric(tips_sub_miss['total_bill'], errors='ignore')
print(tips_sub_miss.dtypes)
이번에는 errors 인자를 coerce로 설정해보자. 그러면 missing이 누락값(NaN)으로 바뀐다.
tips_sub_miss['total_bill'] = pd.to_numeric(tips_sub_miss['total_bill'], errors='coerce')
print(tips_sub_miss)
errors 인자 외에도 downcast 인자가 있다. downcast는 정수, 실수와 같은 자료형을 더 작은 형태로 만들 때 사용한다.
dwoncast 인자에는 integer, signed, unsigned, float 등의 값을 사용할 수 있다.
tips_sub_miss['total_bill'] = pd.to_numeric(tips_sub_miss['total_bill'], errors='coerce', downcast='float')
print(tips_sub_miss.dtypes)
카테고리 자료형
판다스 라이브러리는 유한한 범위의 값만을 가질 수 있는 카테고리라는 특수한 자료형이 있다. 만약 10종류의 과일 이름을 저장한 열이 있다고 가정할 경우 문자열 자료형보다 카테고리 자료형을 사용하는 것이 용량과 속도 면에서 더 효율적이다.
sex 열의 데이터는 남자 또는 여자로만 구성되어 있다. 그래서 카테고리 자료형으로 저장되어 있다.
만약 sex열의 자료형을 문자열로 변환하면 어떻게 될까??
sex 열의 자료형을 문자열로 변환한 다음 데이터프레임의 용량을 info 메서드로 확인하면 10.7 KB 정도이다.
tips['sex'] = tips['sex'].astype('str')
print(tips.info())
다시 카테고리로 변환해본 뒤 용량을 확인해 보자.
tips['sex'] = tips['sex'].astype('category')
print(tips.info())