You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

数据分析前数据类型转换及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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 10:33:12