You need to enable JavaScript to run this app. Python pandas构建线性回归时报#DIV/0!转float的ValueError
优惠活动
大模型
产品
解决方案
定价
更多

Python pandas构建线性回归时报#DIV/0!转float的ValueError

报错原因说明

触发ValueError: could not convert string to float: '#DIV/0!'的核心原因,和你感知的“所有涉及列均为浮点数存储”存在实际误差:

  • #DIV/0!是Excel导出csv时自动生成的公式错误占位符,对应表格里做除法计算时分母为0的失败单元格,本质是纯文本字符串,不是有效数值
  • 只要某一列里混入哪怕1个这类字符串,pandas读入csv时就不会把该列识别为float数值类型,会整体存为object字符串类型
  • 你在Excel里看到的“浮点数存储类型”是单元格的预设格式,不是单元格实际的存储值——带#DIV/0!的单元格哪怕预设格式是浮点数,导出csv后实际写入文件的也是错误文本串
  • sklearn拟合线性回归时,会强制把所有输入特征转换为浮点类型做矩阵运算,碰到这类无法转成数字的字符串就会直接抛出类型转换错误
可落地的解决方案
  • 第一步:读入csv时主动指定需要识别为缺失值的Excel常见错误占位符,避免把错误字符串读成有效数据
    import pandas as pd
    # 读入时配置缺失值识别规则,覆盖所有常见Excel导出错误值
    trans = pd.read_csv(
        "steam3.csv",
        na_values=["#DIV/0!", "#N/A", "#VALUE!", "#REF!"]
    )
    
  • 第二步:校验建模所用列的实际数据类型,确认没有残留字符串值
    # 打印列的实际存储类型,确认三个列均为int/float数值类型
    print(trans[["price", "positive_ratings", "c.owners"]].dtypes)
    
  • 第三步:清洗建模所用的缺失值,避免后续拟合时报空值错误
    可以直接删除建模相关列存在缺失的行,简单适配线性回归的输入要求:
    # 提取建模用的子集,删除存在缺失值的行
    model_dataset = trans[["price", "positive_ratings", "c.owners"]].dropna()
    # 拆分特征和预测目标
    y = model_dataset["price"]
    x = model_dataset[["positive_ratings", "c.owners"]]
    
  • 第四步:重新运行线性回归拟合代码即可正常运行
    from sklearn import linear_model
    mymodel = linear_model.LinearRegression()
    mymodel.fit(x, y)
    print(mymodel.coef_)
    

注意:不要跳过缺失值处理步骤直接拟合,哪怕把#DIV/0!转成了缺失值,存在NaN的输入同样无法被sklearn的线性回归接口接受,会抛出新的空值输入报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.26 22:54:04