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

LinearRegression报NaN/无穷值错误但无空值的解决方法

线性回归报float64类型值异常的排查解决方法

df.isnull().sum()只能识别标准NaN空值,覆盖不到触发该报错的另外两类原因:无穷值、超出float64精度范围的极值,也容易漏检训练标签、预测集的异常,按以下步骤逐一排查即可:

  • 第一步:排查全量数据集的无穷值
    数据计算过程中(比如除0、对数运算处理不当)很容易生成np.inf(正无穷)、-np.inf(负无穷),这类值不会被isnull()识别。对训练特征、训练标签、待预测特征三个数据集分别执行以下代码统计无穷值:

    import numpy as np
    # 替换为你要检查的数据集变量,比如X_train、y_train、X_test都要单独检查
    print(np.isinf(your_dataset).sum())
    

    查到无穷值后先替换为空值,再走你之前的空值处理逻辑即可:

    your_dataset = your_dataset.replace([np.inf, -np.inf], np.nan)
    # 后续接你常用的空值处理:删除、均值/中位数填充都可以
    
  • 第二步:排查超出float64精度范围的极值
    float64支持的数值范围约为-1.8e308 ~ 1.8e308,如果做特征工程时做了无约束的指数变换、未平滑的比值计算,很容易生成超出这个范围的极值,这类值既不会被isnull()识别,也不属于常规无穷值。用以下代码逐字段校验:

    # 返回False的字段就是存在非有限值的异常字段
    print(np.isfinite(your_dataset).all())
    

    这类极值推荐用分位数截断法处理,避免溢出同时保留数据分布:

    import pandas as pd
    # 提取所有数值型字段
    num_cols = your_dataset.select_dtypes(include=[np.number]).columns
    for col in num_cols:
        # 取1%和99%分位作为截断边界
        lower = your_dataset[col].quantile(0.01)
        upper = your_dataset[col].quantile(0.99)
        your_dataset[col] = your_dataset[col].clip(lower, upper)
    
  • 第三步:排查高频遗漏的校验盲区
    90%以上“已经洗过数据还是报错”的情况,都是漏了以下场景:

    • 漏查训练标签列:大部分人清洗数据时只处理特征表X,忘了检查标签列y是否存在空值、无穷值、极值,拟合阶段就会触发报错
    • 漏查待预测数据集:如果模型拟合阶段没报错,调用predict()时才弹错,基本是待预测的测试集/新数据集没有和训练集走完全一致的清洗流程,残留了异常值
    • 非数值类型残留:如果建模字段里混了object类型的内容(比如没转干净的带特殊符号的字符串、空字符串),isnull()识别不到这类异常,但建模时强制转float失败也会报同类错。先执行your_dataset.dtypes检查所有入模字段类型,非数值字段统一做强制转换,转换失败的内容置为空值再处理:
      for col in num_cols:
          your_dataset[col] = pd.to_numeric(your_dataset[col], errors='coerce')
      # 转换完成后再补一次空值处理
      

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.02 08:09:42