아미(아름다운미소)

데이터프레임의 컬럼 타입을 지정된 타입으로 변경 본문

랭귀지/python

데이터프레임의 컬럼 타입을 지정된 타입으로 변경

유키공 2024. 6. 28. 20:57

데이터프레임의 컬럼 타입을 지정된 타입으로 변경합니다.

예제1

def change_column_types(df, column_types):
    """
    데이터프레임의 컬럼 타입을 지정된 타입으로 변경합니다.
    
    Args:
        df (pandas.DataFrame): 컬럼 타입을 변경할 데이터프레임
        column_types (dict): 컬럼 이름과 타입을 매핑한 딕셔너리
    """
    for col in df.columns:
        if col in column_types:
            try:
                df[col] = df[col].astype(column_types[col])
            except ValueError:
                print(f"Failed to convert column '{col}' to type '{column_types[col]}'")
                pass
    return df
    
# 데이터프레임 생성
df = pd.DataFrame({
    'A': [1, 2, 3],
    'B': [4.0, 5.0, 6.0],
    'C': [7, 8, 'a'],
    'D': [10, 11, 12]
})

# 미리 저장된 딕셔너리
column_types = {
    'A': 'int',
    'B': 'int',
    'C': 'int',
    'D': 'int'
}

# 함수 호출
df_updated = change_column_types(df, column_types)
print(df_updated.dtypes)

예제2

import pandas as pd

def change_column_types(df, column_types):
    """
    데이터프레임의 컬럼 타입을 지정된 타입으로 변경합니다.
    
    Args:
        df (pandas.DataFrame): 컬럼 타입을 변경할 데이터프레임
        column_types (dict): 컬럼 이름과 타입을 매핑한 딕셔너리
    """
    for col in df.columns:
        if col in column_types:
            try:
                df[col] = df[col].astype(column_types[col])
                print(f"컬럼 '{col}'의 타입을 '{column_types[col]}'로 변경했습니다.")
            except ValueError:
                print(f"컬럼 '{col}'의 데이터 타입을 '{column_types[col]}'로 변경할 수 없습니다.")
        else:
            print(f"컬럼 '{col}'은 미리 저장된 딕셔너리에 없습니다.")
    
    return df

# 데이터프레임 생성
df = pd.DataFrame({
    'A': [1, 2, 3],
    'B': [4.0, 5.0, 6.0],
    'C': [7, 8, 'a'],
    'D': [10, 11, 12]
})

# 미리 저장된 딕셔너리
column_types = {
    'A': 'int',
    'B': 'int',
    'C': 'int',
    'D': 'int'
}

# 함수 호출
df_updated = change_column_types(df, column_types)
print(df_updated.dtypes)

누락값 처리부분 추가1

import pandas as pd

def change_column_types(df, column_types, fill_value=None):
    """
    데이터프레임의 컬럼 타입을 지정된 타입으로 변경하고, 누락값을 처리합니다.
    
    Args:
        df (pandas.DataFrame): 컬럼 타입을 변경할 데이터프레임
        column_types (dict): 컬럼 이름과 타입을 매핑한 딕셔너리
        fill_value (any, optional): 누락값을 채울 값. 기본값은 None.
    
    Returns:
        pandas.DataFrame: 컬럼 타입이 변경되고 누락값이 처리된 데이터프레임
    """
    df_updated = df.copy()
    
    for col in df.columns:
        if col in column_types:
            current_type = df[col].dtype
            target_type = column_types[col]
            
            if current_type != target_type:
                try:
                    df_updated[col] = df_updated[col].astype(target_type)
                    
                    if fill_value is not None:
                        df_updated[col] = df_updated[col].fillna(fill_value)
                except ValueError:
                    pass
    
    return df_updated

# 데이터프레임 생성
df = pd.DataFrame({
    'A': [1, 2, 3],
    'B': [4.0, 5.0, 6.0],
    'C': [7, 8, None],
    'D': [10, 11, 12]
})

# 미리 저장된 딕셔너리
column_types = {
    'A': 'int',
    'B': 'int',
    'C': 'int',
    'D': 'int'
}

# 함수 호출
df_updated = change_column_types(df, column_types, fill_value=0)
print(df_updated.dtypes)
print(df_updated)

누락값 처리부분 추가2

import pandas as pd

def change_column_types(df, column_types, fill_value_str=None, fill_value_num=None):
    """
    데이터프레임의 컬럼 타입을 지정된 타입으로 변경하고, 누락값을 처리합니다.
    
    Args:
        df (pandas.DataFrame): 컬럼 타입을 변경할 데이터프레임
        column_types (dict): 컬럼 이름과 타입을 매핑한 딕셔너리
        fill_value_str (any, optional): 문자열 컬럼의 누락값을 채울 값. 기본값은 None.
        fill_value_num (any, optional): 숫자 컬럼의 누락값을 채울 값. 기본값은 None.
    
    Returns:
        pandas.DataFrame: 컬럼 타입이 변경되고 누락값이 처리된 데이터프레임
    """
    df_updated = df.copy()
    
    for col in df.columns:
        if col in column_types:
            current_type = df[col].dtype
            target_type = column_types[col]
            
            if current_type != target_type:
                try:
                    df_updated[col] = df_updated[col].astype(target_type)
                    
                    if target_type == 'object':
                        if fill_value_str is not None:
                            df_updated[col] = df_updated[col].fillna(fill_value_str)
                    else:
                        if fill_value_num is not None:
                            df_updated[col] = df_updated[col].fillna(fill_value_num)
                except ValueError:
                    pass
    
    return df_updated

# 데이터프레임 생성
df = pd.DataFrame({
    'A': [1, 2, 3],
    'B': [4.0, 5.0, 6.0],
    'C': [7, 8, None],
    'D': [10, 11, 'a']
})

# 미리 저장된 딕셔너리
column_types = {
    'A': 'int',
    'B': 'int',
    'C': 'int',
    'D': 'object'
}

# 함수 호출
df_updated = change_column_types(df, column_types, fill_value_str='unknown', fill_value_num=0)
print(df_updated.dtypes)
print(df_updated)

'랭귀지 > python' 카테고리의 다른 글

컬럼명을 닥셔너리에 저장 후 불러쓰기  (0) 2024.07.01
pandas 병렬처리  (0) 2024.06.27
타입지정  (0) 2024.06.26
pandas 날짜차이 분으로 환산  (0) 2024.06.24
fastapi mysql crud & javascript & flutter 예제  (0) 2024.06.22
Comments