Pandas에서 데이터 형식 변경하기

Pandas에서 데이터 형식 변경하기

Pandas
Pandas에서 데이터 형식 변경하기
Author

gabriel yang

Published

August 29, 2024

Pandas는 데이터 분석을 위한 강력한 도구로, 다양한 형식의 데이터를 처리하고 변환하는 기능을 제공합니다. 데이터를 분석하는 과정에서 데이터의 형식을 변경해야 할 때가 많습니다. 이 글에서는 Pandas에서 데이터 형식을 변경하는 방법을 예시와 함께 설명하겠습니다.

1. 데이터 형식 변경의 필요성

데이터 분석에서 정확한 데이터 형식은 매우 중요합니다. 예를 들어, 날짜를 문자열로 처리하는 것보다 날짜 형식으로 변환하여 사용하는 것이 분석에 더 유리할 수 있습니다. 데이터 형식을 올바르게 지정하지 않으면 계산 오류나 데이터 왜곡이 발생할 수 있습니다.

2. Pandas에서 데이터 형식 확인하기

먼저, 데이터의 현재 형식을 확인하는 방법부터 살펴보겠습니다. Pandas에서는 dtypes 속성을 사용하여 각 열의 데이터 형식을 확인할 수 있습니다.

import pandas as pd

# 샘플 데이터프레임 생성
data = {
    'name': ['Alice', 'Bob', 'Charlie'],
    'age': ['25', '30', '35'],  # 나이를 문자열로 저장
    'birthdate': ['1995-05-15', '1990-08-25', '1985-12-20']  # 날짜도 문자열로 저장
}

df = pd.DataFrame(data)

# 데이터프레임의 데이터 형식 확인
df.dtypes
name         object
age          object
birthdate    object
dtype: object

이 코드를 실행하면 각 열의 데이터 형식이 출력됩니다. 여기서 agebirthdate 열은 문자열(object)로 표시됩니다. 이를 적절한 데이터 형식으로 변환해야 합니다.

3. 숫자 데이터 형식으로 변환하기

숫자 데이터를 문자열로 저장하면 계산에 문제가 발생할 수 있습니다. 이를 해결하기 위해, astype() 메서드를 사용하여 데이터를 정수(int)나 부동 소수점(float) 형식으로 변환할 수 있습니다.

예제: 문자열을 정수로 변환

# 'age' 열을 정수(int)로 변환
df['age'] = df['age'].astype(int)

df.dtypes
name         object
age           int64
birthdate    object
dtype: object

위 코드를 실행하면 age 열의 데이터 형식이 int64로 변경됩니다. 이제 이 열에 대해 숫자 연산을 수행할 수 있습니다.

예제: 문자열을 부동 소수점으로 변환

# 새로운 열을 부동 소수점(float)으로 변환
df['weight'] = ['60.5', '70.2', '80.3']  # 새 문자열 열 추가
df['weight'] = df['weight'].astype(float)

df.dtypes
name          object
age            int64
birthdate     object
weight       float64
dtype: object

이 코드는 weight 열을 부동 소수점 형식(float64)으로 변환합니다.

4. 날짜 데이터 형식으로 변환하기

날짜를 문자열로 저장하는 경우, 날짜 형식으로 변환하여 날짜 연산을 쉽게 할 수 있습니다. 이를 위해 pd.to_datetime() 함수를 사용합니다.

예제: 문자열을 날짜 형식으로 변환

# 'birthdate' 열을 날짜 형식(datetime)으로 변환
df['birthdate'] = pd.to_datetime(df['birthdate'])

display(df.dtypes)
display(df['birthdate'])
name                 object
age                   int64
birthdate    datetime64[ns]
weight              float64
dtype: object
0   1995-05-15
1   1990-08-25
2   1985-12-20
Name: birthdate, dtype: datetime64[ns]

birthdate 열이 datetime64[ns] 형식으로 변환되며, 이를 통해 날짜 차이 계산이나 특정 날짜를 기준으로 필터링하는 작업이 가능해집니다.

5. 카테고리 데이터 형식으로 변환하기

카테고리 데이터는 고유한 값의 집합으로, 메모리를 절약하고 성능을 향상시킬 수 있습니다. Pandas에서는 astype('category')를 사용하여 데이터를 카테고리 형식으로 변환할 수 있습니다.

예제: 문자열을 카테고리로 변환

# 'name' 열을 카테고리로 변환
df['name'] = df['name'].astype('category')

display(df.dtypes)
display(df['name'].cat.categories)
name               category
age                   int64
birthdate    datetime64[ns]
weight              float64
dtype: object
Index(['Alice', 'Bob', 'Charlie'], dtype='object')

name 열이 카테고리 형식으로 변환되며, 이는 고유한 값만을 메모리에 저장하여 메모리 사용량을 줄입니다.

6. 데이터 형식 변경 시 주의사항

  • 변환 오류: 데이터 형식을 변환할 때, 형식에 맞지 않는 데이터가 있으면 오류가 발생할 수 있습니다. 예를 들어, 숫자 형식으로 변환하려고 할 때 숫자가 아닌 값이 포함되어 있으면 ValueError가 발생합니다.

    data = {
        'name': ['Alice', 'Bob', 'Charlie'],
        'age': ['25a', '30', '35'],  # 나이를 문자열로 저장
        'birthdate': ['1995-05-15', '1990-08-25', '1985-12-20']  # 날짜도 문자열로 저장
    }
    
    df = pd.DataFrame(data)
    
    df['age'] = df['age'].astype(int)  # '25a' 같은 값이 있으면 오류 발생
    ValueError: invalid literal for int() with base 10: '25a'
  • 결측치 처리: 결측치(NaN)가 있는 열을 변환할 때는 주의가 필요합니다. 예를 들어, 문자열을 숫자로 변환할 때 결측치는 그대로 남아 있게 됩니다.

    import numpy as np
    data = {
        'name': ['Alice', 'Bob', 'Charlie'],
        'age': ['25', '30', np.NaN],  # 나이를 문자열로 저장
        'birthdate': ['1995-05-15', '1990-08-25', '1985-12-20']  # 날짜도 문자열로 저장
    }
    
    df = pd.DataFrame(data)
    
    df['age'] = pd.to_numeric(df['age'], errors='coerce')  # 숫자가 아닌 값을 NaN으로 변환
    df
    name age birthdate
    0 Alice 25.0 1995-05-15
    1 Bob 30.0 1990-08-25
    2 Charlie NaN 1985-12-20
  • 메모리 사용량: 카테고리 형식은 메모리 사용량을 줄일 수 있지만, 데이터에 고유 값이 많을 경우 성능에 영향을 줄 수 있습니다. 따라서 카테고리 형식은 고유 값이 적은 열에 사용하는 것이 좋습니다.

7. 결론

Pandas에서 데이터 형식을 올바르게 지정하는 것은 데이터 분석의 기초이며, 정확한 분석 결과를 얻기 위해 매우 중요합니다. 이 글에서 소개한 astype(), pd.to_datetime(), pd.to_numeric() 등을 사용하면 다양한 형식의 데이터를 손쉽게 변환할 수 있습니다.