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

Python构建线性回归模型拟合时报ValueError:无法将字符串转换为float

报错排查与解决方案

报错根因

线性回归属于scikit-learn的数值计算类模型,要求输入的特征矩阵所有值都为数值类型,你已经确认标签Rating是浮点型,因此问题出在输入特征X_train中存在字符串类型的内容,模型无法将字符串GAME自动转换为可计算的浮点数值,因此抛出该错误。

排查步骤

  • 第一步:检查所有特征列的数据类型,定位字符串类型列
    运行代码:
    print(X_train.dtypes)
    
    输出结果中类型为object的列,就是包含字符串内容的可疑列。
  • 第二步:定位包含GAME值的具体列
    运行代码:
    for col in X_train.columns:
        if 'GAME' in X_train[col].astype(str).values:
            print(f"包含异常字符串的列:{col}")
    
  • 第三步:确认该列的业务属性,判断是正常分类特征还是异常脏数据
    运行代码查看该列的取值分布:
    print(X_train[你定位到的列名].value_counts())
    

对应解决方法

情况1:该列为正常分类特征(如内容类别、产品类型等离散分类属性)

根据取值数量选择编码方式:

  • 取值数量小于10种:使用独热编码,避免标签编码引入的数值大小优先级干扰
    训练集处理代码:
    X_train = pd.get_dummies(X_train, columns=[你定位到的列名], drop_first=True)
    
    测试集必须使用和训练集完全一致的编码规则,不要单独对测试集执行get_dummies,避免出现维度不匹配的问题。
  • 取值数量大于等于10种:使用标签编码减少特征维度
    训练集处理代码:
    from sklearn.preprocessing import LabelEncoder
    le = LabelEncoder()
    X_train[你定位到的列名] = le.fit_transform(X_train[你定位到的列名])
    
    测试集处理代码:
    X_test[你定位到的列名] = le.transform(X_test[你定位到的列名])
    

情况2:该列为异常脏数据(本该是数值的列混入了'GAME'这类异常值)

两种处理方案二选一:

  • 删除异常行:同步删除特征和标签中对应位置的行
    # 过滤异常行
    X_train = X_train[X_train[你定位到的列名].astype(str) != 'GAME'].reset_index(drop=True)
    # 同步过滤标签
    y_train = y_train[y_train.index.isin(X_train.index)].reset_index(drop=True)
    
  • 替换异常值后填充:将字符串异常值转为空值,再用均值/中位数填充
    # 转数值,异常值转为空值
    X_train[你定位到的列名] = pd.to_numeric(X_train[你定位到的列名], errors='coerce')
    # 用列均值填充空值,也可替换为median()用中位数填充
    X_train[你定位到的列名] = X_train[你定位到的列名].fillna(X_train[你定位到的列名].mean())
    
    测试集需要做完全相同的替换和填充操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 20:06:03