数据分析前数据类型转换及One-Hot编码类型匹配问题求助
解决道路事故数据集的类型转换与One-Hot编码格式问题
1. 修正基础字段的数据类型
处理age字段转为int
你的age字段当前是float类型,直接通过astype(int)转换即可。如果数据中存在缺失值,建议先填充(比如用均值、中位数)或删除缺失行,避免转换报错:
import pandas as pd # 假设你的数据集是df df['age'] = df['age'].astype(int) # 存在缺失值的情况示例:先填充再转换 # df['age'] = df['age'].fillna(df['age'].median()).astype(int)
处理casualty字段转为categorical
注意到你的示例数据里有2.2这个值,这大概率是数据录入错误(类别对应的数值应为离散整数,比如1对应fatal、2对应serious)。先修正异常值,再通过映射转换为分类类型:
# 先修正异常值(示例中将2.2替换为2.0,可根据实际业务逻辑调整) df['casualty'] = df['casualty'].replace(2.2, 2.0) # 定义数值到类别的映射字典 casualty_map = {1.0: 'fatal', 2.0: 'serious'} # 映射后转为categorical类型 df['casualty'] = df['casualty'].map(casualty_map).astype('category')
2. 将One-Hot编码结果转为categorical类型
不管用pandas.get_dummies还是sklearn的OneHotEncoder,默认生成的都是数值(bool/int)类型列,只需对编码后的每一列调用astype('category')即可满足要求:
方法1:用pandas.get_dummies实现
# 对casualty列做One-Hot编码 one_hot_cols = pd.get_dummies(df['casualty'], prefix='casualty') # 遍历编码列,转换为categorical类型 for col in one_hot_cols.columns: one_hot_cols[col] = one_hot_cols[col].astype('category') # 合并回原数据集 df = pd.concat([df, one_hot_cols], axis=1)
方法2:用sklearn.OneHotEncoder实现
如果用sklearn的编码器,处理方式类似:
from sklearn.preprocessing import OneHotEncoder import numpy as np # 初始化编码器,设置输出为密集矩阵 encoder = OneHotEncoder(sparse_output=False, dtype=np.int32) # 拟合并转换casualty列 encoded_data = encoder.fit_transform(df[['casualty']]) # 转为DataFrame并设置列名 encoded_df = pd.DataFrame(encoded_data, columns=encoder.get_feature_names_out(['casualty'])) # 转换为categorical类型 encoded_df = encoded_df.astype('category') # 合并回原数据集 df = pd.concat([df, encoded_df], axis=1)
这样处理后,One-Hot编码的列就会是categorical类型,同时保留了类别的语义信息,符合要求。
内容的提问来源于stack exchange,提问作者Ammara Rasheed
相关产品推荐
相关产品推荐

