pandas 데이터프레임을 다루다 보면 계산이나 분석 목적에 맞추기 위해 하나 이상의 열의 데이터 유형(dtype)을 변경해야 하는 경우가 자주 발생합니다. 다행히 pandas에는 이러한 변환 작업을 손쉽게 처리할 수 있는 내장 함수와 메서드가 여러 가지 마련되어 있습니다. 이 글에서는 대표적인 세 가지 방법인 astype(), to_numeric(), infer_objects()를 예제와 함께 살펴보겠습니다.
1. astype() 메서드 활용
astype() 메서드를 사용하면 데이터프레임의 특정 열 또는 모든 열에 새로운 데이터 유형을 지정할 수 있습니다. 아래 예제에서는 기존의 모든 열을 문자열(string) 타입으로 변환합니다.
예제
import pandas as pd
# 샘플 데이터프레임
df = pd.DataFrame({
'DayNo': [1, 2, 3, 4, 5,6,7],
'Name': ['Sun', 'Mon', 'Tue', 'Wed', 'Thu','Fri','Sat'],
'Qty': [2.6, 5, 11.8, 2, 5.6,0,0.25]})
# 기존 데이터 유형 확인
print(df.dtypes)
# 문자열 타입으로 변환
df_str = df.astype(str)
# 변환 결과 확인
print("***After Conversion***")
print(df_str.dtypes)실행 결과
위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
DayNo int64 Name object Qty float64 dtype: object ***After Conversion*** DayNo object Name object Qty object dtype: object
모든 열이 object(문자열) 타입으로 성공적으로 변환된 것을 확인할 수 있습니다.
2. to_numeric() 함수 활용
to_numeric() 함수를 사용하면 문자열로 저장되어 있는 숫자 값을 숫자형으로 변환할 수 있습니다. CSV 파일 등에서 데이터를 불러올 때 숫자가 문자열로 인식되는 경우에 특히 유용합니다.
예제
import pandas as pd
# 예제 데이터프레임
df = pd.DataFrame({
'DayNo': [1, 2, 3, 4, 5,6,7],
'Name': ['Sun', 'Mon', 'Tue', 'Wed', 'Thu','Fri','Sat'],
'Qty': [2.6, 5, 11.8, 2, 5.6,0,0.25]})
df_str = df.astype(str)
print(df_str.dtypes)
# 숫자형으로 변환 적용
print("After Conversion:")
df_num = pd.to_numeric(df_str.DayNo)
print('DayNo:',df_num.dtypes)실행 결과
DayNo object Name object Qty object dtype: object After Conversion: DayNo: int64
문자열이었던 DayNo 열이 int64 정수형으로 변환된 것을 볼 수 있습니다.
3. infer_objects() 메서드 활용
infer_objects()는 소프트 변환(soft conversion) 방식의 메서드로, object 타입으로 지정된 열들을 실제 데이터에 맞는 더 구체적인 타입으로 추론하여 변환해 줍니다.
예제
import pandas as pd
# 예제 데이터프레임
df = pd.DataFrame({
'DayNo': [1, 2, 3, 4, 5,6,7],
# 'Name': ['Sun', 'Mon', 'Tue', 'Wed', 'Thu','Fri','Sat'],
'Qty': ['2.6', '5', '11.8', '2', '5.6','0','0.25']}, dtype='object')
print(df.dtypes)
# 변환 적용
print("After Conversion:")
df_new = df.infer_objects()
print(df_new.dtypes)실행 결과
DayNo object Qty object dtype: object After Conversion: DayNo int64 Qty object dtype: object
정수 값으로만 구성된 DayNo 열은 int64로 변환되지만, Qty 열은 소수점이 포함된 문자열이라 그대로 object 타입으로 유지됩니다. 이처럼 infer_objects()는 명시적으로 지정하지 않아도 데이터의 실제 형태를 기반으로 적절한 타입을 추론한다는 장점이 있습니다.