Python使用SimpleImputer填充数据空值时报字符串转浮点错误如何解决
报错原因
你的数据集同时包含数值型特征(如48.0、80.0等数字)与字符串类型的分类特征(如"normal"、"notpresent"等文本值),代码中强制将全量数据转换为np.float类型时,字符串类特征无法完成类型转换,因此触发该报错。
解决方法
你需要对不同类型的特征分开处理缺失值,推荐使用pandas简化处理流程,示例代码如下:
import pandas as pd import numpy as np from sklearn.impute import SimpleImputer # 加载数据,指定分隔符为分号,空字符串直接识别为缺失值NaN df = pd.read_csv("你的数据文件路径", sep=";", header=None, na_values="") # 拆分数值列与分类列 num_cols = df.select_dtypes(include=np.number).columns cat_cols = df.select_dtypes(exclude=np.number).columns # 数值列用均值填充 num_imputer = SimpleImputer(missing_values=np.nan, strategy="mean") df[num_cols] = num_imputer.fit_transform(df[num_cols]) # 分类列用众数填充 cat_imputer = SimpleImputer(missing_values=np.nan, strategy="most_frequent") df[cat_cols] = cat_imputer.fit_transform(df[cat_cols]) # 转换为列表格式,和原有代码输出对齐 result = df.values.tolist()
如果坚持使用纯numpy实现,提前拆分数值列和分类列的索引,分别完成填充后再拼接即可。
内容的提问来源于stack exchange,提问作者Sakura
相关产品推荐
相关产品推荐

