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

使用StandardScaler时触发ValueError无法将字符串转float怎么解决

报错原因

ValueError: could not convert string to float: 'Son' 是因为你调用StandardScaler做标准化时,输入的特征矩阵中包含字符串类型的值,StandardScaler仅支持数值型数据计算均值和方差,无法直接处理字符串。
从你的代码来看,大概率是Gender列为文本类型(比如性别取值为男/女、Male/Female),或是你选中的前两列中混入了包含Son的字符串列,也有可能Age列存在非数字的异常值。

解决步骤
  1. 先确认数据集结构和各列取值,执行代码排查问题列:
# 查看数据集前10行和各列数据类型
print(data.head(10))
print("各列数据类型:\n", data.dtypes)
# 排查包含'Son'的列
for col in data.columns:
    if data[col].astype(str).str.contains('Son').any():
        print(f"包含'Son'的列:{col}")
  1. 对分类字符串特征做数值编码
    Gender是分类特征,不能直接送入StandardScaler,需要先转为数值:
  • 若Gender只有2种取值,直接用映射编码即可:
# 把映射规则替换成你数据集里的实际取值,示例是男→0,女→1
data['Gender'] = data['Gender'].map({'男': 0, '女': 1})
  • 若Gender有超过2种取值,使用独热编码:
data = pd.get_dummies(data, columns=['Gender'], drop_first=True)
# 编码后要调整特征列的取值
feature_cols = [col for col in data.columns if 'Gender' in col] + ['Age']
  1. 清洗Age列的异常值
    如果排查发现Age列存在Son这类非数字值,做如下处理:
# 把非数字的Age值转为空值,再用Age的均值填充
data['Age'] = pd.to_numeric(data['Age'], errors='coerce')
data['Age'] = data['Age'].fillna(data['Age'].mean().round(0))
  1. 调整代码执行顺序,编码完成后再拆分数据集做标准化:
X = data[feature_cols].values
y = data.iloc[:,2].values
# 注意:y如果是分类标签,不需要做标准化,也不要误放入特征矩阵X中
X_train, X_test, y_train, y_test =  train_test_split(X,y,test_size = 0.25, random_state= 0)
from sklearn.preprocessing import StandardScaler
sc_X = StandardScaler()
X_train = sc_X.fit_transform(X_train)
X_test = sc_X.transform(X_test)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 22:27:00