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

LGBM训练报float64相关错误,已执行dropna操作仍未解决如何处理

LGBM训练报错ValueError排查解决步骤

报错触发原因不只有NaN缺失值,还包含你现有预处理未覆盖的无穷值、非数值类型特征问题,按以下步骤排查即可:

  • 排查并处理无穷值(inf/-inf)
    dropna()仅能清除NaN类型的缺失值,无法识别正负无穷值,运行以下代码确认是否存在无穷值:
import numpy as np
# 统计所有数值列的无穷值数量
print(np.isinf(X.select_dtypes(include=[np.number])).sum())

确认存在无穷值后执行如下处理:

# 把正负无穷值替换为NaN后统一删除
X = X.replace([np.inf, -np.inf], np.nan)
X = X.dropna().reset_index(drop=True)
  • 处理非数值类型特征列
    你的数据中存在Date、H两个object类型的列,直接输入模型会触发sklearn的数值校验失败:
    1. Date列处理:不要直接传入原始日期字符串,转换为可识别的数值特征:
    import pandas as pd
    # 转日期格式后提取数值特征
    X['Date'] = pd.to_datetime(X['Date'])
    X['year'] = X['Date'].dt.year
    X['month'] = X['Date'].dt.month
    X['day'] = X['Date'].dt.day
    # 删除原始object类型的Date列
    X = X.drop('Date', axis=1)
    
    1. H列处理:如果是类别特征,先转换为LGBM支持的category类型,或做编码转为数值,同时检查是否存在空字符串、特殊符号等异常内容:
    # 查看H列所有唯一值确认无异常
    print(X['H'].unique())
    # 转换为类别类型
    X['H'] = X['H'].astype('category')
    
  • 确认预处理执行顺序
    必须在train_test_split拆分数据集之前完成全量X的清洗操作,避免拆分后测试集未做清洗导致报错。
  • 兜底校验
    如果仍有报错,可强制将所有列转换为数值类型,转换失败的内容会被置为NaN后统一删除:
X = X.apply(pd.to_numeric, errors='coerce')
X = X.dropna().reset_index(drop=True)

注:LGBM本身原生支持缺失值训练,但sklearn的前置数据校验层会提前检查数值合法性,因此无穷值、非数值类型等问题会提前触发报错,和LGBM本身的能力无关。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.15 17:57:05