拟合LinearRegression模型时遇“无法将字符串转为float”错误求助
解决LinearRegression拟合时的字符串转数值错误
问题核心分析
错误提示ValueError: could not convert string to float: 'YES'说明数据中仍存在未被转换为数值类型的字符串列,和uint8类型无关——uint8是生成虚拟变量后常见的内存优化类型(比如pd.get_dummies默认生成),scikit-learn的LinearRegression完全支持这种数值类型,无需额外转换。
具体解决步骤
定位未处理的字符串列
先找出所有字符串类型(object)的列,执行代码:# 输出所有object类型的列名 print(df.select_dtypes(include=['object']).columns)这会帮你定位到包含'YES'这类字符串的目标列。
转换字符串列为数值类型
- 若为二元分类列(仅含YES/NO两类值):直接映射转换
# 替换成你的目标列名 df['target_col'] = df['target_col'].map({'YES': 1, 'NO': 0}) - 若为多分类列:用虚拟变量(独热编码)处理
# 对所有object列生成虚拟变量,drop_first避免多重共线性 df = pd.get_dummies(df, columns=df.select_dtypes(include=['object']).columns, drop_first=True)
- 若为二元分类列(仅含YES/NO两类值):直接映射转换
重新拟合模型
处理完所有字符串列后,重新准备特征矩阵并拟合:X_multi = df.drop('price', axis=1) y_multi = df['price'] model1 = LinearRegression() model1.fit(X_multi, y_multi)额外检查:缺失值处理完整性
虽然已填充n_hos_beds的缺失值,建议确认所有列的缺失情况:print(df.isnull().sum())若存在其他缺失值,根据列类型用均值、中位数或众数填充。
内容的提问来源于stack exchange,提问作者Predrag
相关产品推荐
相关产品推荐

