본문 바로가기

TIL

[240207] 문자열, 숫자 데이터 타입 변환(astype, to_numeric)

* 자료 출처: Kaggle - Google Analytics Customer Revenue Prediction

 

1. 문제 배경

- 데이터 전처리 과정에서 문자열(str)과 정수(int) 타입으로 데이터 타입 변경 필요

 

2.데이터 타입 변경

1) astype()을 활용한 문자열 변환 

- astype()은 열 기준으로 데이터 타입을 변경하는 함수로, 여러 칼럼을 원하는 타입으로 한 번에 변경 가능

# 모든 열의 데이터 타입 변경  
DataFrame.astype(dtype, copy=True, errors='raise')

## dtype: 변경할 type 
## copy: 사본 생성 여부
## errors: {'raies', 'ignore'} 변경 불가 시 오류 발생 여부

# 한 개 열의 데이터 타입 변경 
DataFrame.astype({'col1':'dtype'})

# 특정 열의 데이터 타입 변경 
DataFrame.astype({'col1':'dtype', 'col2':'dtype'})

 

 

- 단, 칼럼 내 null값(NaN) 포함 시 오류 발생해 변환이 안 됨 (사용 전 결측치 처리)

- inplace* 지정이 안되므로 원본 타입을 바꾸고 싶다면 변수를 생성하여 재정의 필요

* inplace 란? 
기존 데이터 프레임 내 변경된 설정 저장 여부를 결정하는 코드
inplace = True는 변경된 설정을 덮어쓰겠다는 의미

 

- 문자열 변환 코드 

 └ str()는 객체를 문자열로 바꿔주는 파이썬 내장 함수로, 열 전체 값 변경을 위해 astype() 활용 

# int to str
df = df.astype({'fullVisitorId':'str', 'visitNumber':'str})

# 데이터 프레임 뒤에 붙이는 방식도 가능
df[['fullVisitorId', 'visitNumber']].astype(str)

 

 

2) pd. to_numeric()을 활용한 수치형 변환

- pd. to_numeric()은 데이터 타입을 숫자로 바꿔주는 판다스 라이브러리 함수 

pd.to_numeric(적용할 값, errors='에러 처리 방식')

## 에러 처리 방식
# raise: 에러 표시 
# coerce: 에러 발생 시 NaN으로 처리
# ignore: 에러 무시

 

- 상수, 리스트, 튜플, 배열, 시리즈 자료형에 적용

└ 데이터프레임에 적용하려면, 각 열을 시리즈로 뽑아서 반복분으로 바꾸거나 apply 함수 사용 

 

- 수치형 변환 코드 

└ astype() 사용 시 일부 null값이 포함된 열 때문에 오류 발생하여 to_numberic으로 적용 

# 정수형으로 변환
# astype으로 변경 시 'totals.pageviews'에서 에러(float NaN) 발생하여 to_numeric으로 조정 

numberic_list = ['totals.visits','totals.hits','totals.pageviews','totals.bounces','totals.newVisits','totals.transactionRevenue'] 

for num_col in numberic_list:
    df[num_col] = pd.to_numeric(df[num_col], errors='coerce') #coerce는 오류 발견시 NaN으로 변경


# totals_transactionRevenue 금액 조정 
# GA상 매출액 10^6 값으로 표기 (ex. 2.4는 2400000로)
df['totals.transactionRevenue'] = (df['totals.transactionRevenue']**(1/6)).round(2)