sklearn LinearRegression fit报错:无法将字符串转为float:'{}' 求助
问题场景
使用线性回归算法训练模型,执行训练代码lin_reg_model.fit(X_train,Y_train)时抛出如下报错:
ValueError Traceback (most recent call last) in ()
----> 1 lin_reg_model.fit(X_train,Y_train)4 frames /usr/local/lib/python3.7/dist-packages/pandas/core/generic.py in array(self, dtype) 1991 1992 def array(self, dtype: NpDtype | None = None) -> np.ndarray:
-> 1993 return np.asarray(self._values, dtype=dtype) 1994 1995 def array_wrap(ValueError: could not convert string to float: '{}'
故障原因
- 线性回归模型训练仅接收数值型输入,当前传入的
X_train或Y_train中存在字符串类型内容,numpy无法自动将其转换为浮点型数值,因此触发报错。 - 常见诱因:
- 特征列存在未做编码的分类文本值,比如性别、地区类的文字取值
- 数据清洗不彻底,存在
'{}'这类字符串格式的缺失值占位符,未被识别处理 - 数值列被错误存储为object类型,混入了非数字内容,比如表头串入数据行、异常文本写入数值字段
排查与解决步骤
- 定位异常列
先运行代码确认数据类型,找出存在非数值内容的字段:
# 打印训练特征、标签的所有列数据类型 print("X_train各列类型:\n", X_train.dtypes) print("Y_train类型:", Y_train.dtype) # 遍历所有object类型列,查看具体取值确认异常内容 for col in X_train.select_dtypes(include=['object']).columns: print(f"\n列[{col}]的前10个唯一取值:", X_train[col].unique()[:10])
如果标签列Y_train是object类型,用同样方法查看Y_train的取值即可。
- 针对性处理异常数据
- 场景1:字段为分类文本特征
无序分类用独热编码转换,有序分类用标签编码转换,示例:import pandas as pd # 替换为实际的分类列名列表 cat_cols = ["列名1", "列名2"] X_train = pd.get_dummies(X_train, columns=cat_cols, drop_first=True) - 场景2:存在字符串格式的缺失值占位符
先把'{}'这类占位符替换为标准空值,再做填充或删除:import numpy as np # 替换指定字符串为空值 X_train = X_train.replace('{}', np.nan) # 数值列用中位数填充空值,也可根据业务场景选择均值、众数填充或删除空行 num_cols = X_train.select_dtypes(include=[np.number]).columns X_train[num_cols] = X_train[num_cols].fillna(X_train[num_cols].median()) - 场景3:数值列被误存为字符串类型
强制转换字段类型,异常值转为空值后统一处理:# 替换为实际被误存为字符串的数值列名列表 num_str_cols = ["列名3", "列名4"] for col in num_str_cols: X_train[col] = pd.to_numeric(X_train[col], errors='coerce')
- 校验后重跑
处理完成后再次执行print(X_train.dtypes, Y_train.dtype),确认所有输入字段均为int/float数值类型,重新运行训练代码即可正常执行。
内容的提问来源于stack exchange,提问作者Arthur capro
相关产品推荐
相关产品推荐

