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

使用SimpleImputer均值策略遇ValueError,非数值数据转换失败求助

解决方案

问题根源

报错核心原因是:SimpleImputer的mean填充策略仅支持数值型数据,但你的数据集包含字符串类型列(比如OWN_OCCUPIED列中的'PUTNAM'),直接对整个DataFrame执行均值填充必然失败。

修复步骤

1. 优化OWN_OCCUPIED列的NaN替换

你之前用循环判断的代码可以简化,用pandas内置方法更高效:

import pandas as pd
import numpy as np

# 读取数据(假设missing_val已定义)
sample_real_state = pd.read_csv('Sample_real_estate_data.csv', na_values=missing_val)
# 将OWN_OCCUPIED中可转为整数的内容替换为NaN
sample_real_state['OWN_OCCUPIED'] = pd.to_numeric(sample_real_state['OWN_OCCUPIED'], errors='coerce').astype('object')

2. 拆分数值列与分类列

把数据集分成数值型和字符串(分类)型两部分,分别处理缺失值:

# 分离数值列和分类列
numeric_cols = sample_real_state.select_dtypes(include=['int64', 'float64']).columns
categorical_cols = sample_real_state.select_dtypes(include=['object']).columns

numeric_data = sample_real_state[numeric_cols]
categorical_data = sample_real_state[categorical_cols]

3. 分别填充缺失值

  • 数值列用mean策略填充
  • 分类列可选择most_frequent(众数)或constant(自定义值)策略填充
from sklearn.impute import SimpleImputer

# 处理数值列缺失值
imp_mean = SimpleImputer(strategy='mean')
numeric_imputed = imp_mean.fit_transform(numeric_data)
numeric_imputed_df = pd.DataFrame(numeric_imputed, columns=numeric_cols)

# 处理分类列缺失值(以众数为例,也可替换为constant策略)
imp_mode = SimpleImputer(strategy='most_frequent')
categorical_imputed = imp_mode.fit_transform(categorical_data)
categorical_imputed_df = pd.DataFrame(categorical_imputed, columns=categorical_cols)

4. 合并处理后的数据集

# 合并数值列和分类列
final_data = pd.concat([numeric_imputed_df, categorical_imputed_df], axis=1)
# 恢复原数据集的列顺序(可选)
final_data = final_data[sample_real_state.columns]

额外说明

如果需要对特定列用自定义值填充(比如你代码里的fill_value="work from home"),可单独处理该列:

# 对OWN_OCCUPIED列用自定义值填充缺失值
sample_real_state['OWN_OCCUPIED'] = sample_real_state['OWN_OCCUPIED'].fillna("work from home")

内容的提问来源于stack exchange,提问作者HARSH PATEL

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 12:41:06