Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Pandas DataFrame에서 하나 이상의 열 데이터 유형 변경하기


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()는 명시적으로 지정하지 않아도 데이터의 실제 형태를 기반으로 적절한 타입을 추론한다는 장점이 있습니다.