如何解决ValueError:输入含NaN、无穷大或dtype('float64')超限值报错
问题根因定位
- 缺失值触发报错:你提供的CSV中最后一行玩家Edgey的
pr10tournamentsv5字段为空,pandas读取后会将空值识别为NaN,sklearn的线性回归模型不允许输入包含空值,这是报错的核心原因 - 数值类型异常:CSV中大部分数值被双引号包裹,pandas默认会将其识别为字符串类型,后续模型计算时也会触发类型不兼容问题
- 你猜测的数值过大问题不存在:float64类型支持最大数值约为10^308,你现有数据最大仅为两万多,完全不会触发溢出
修复步骤
- 统一转换特征字段为数值类型,无法转换的内容自动设为NaN
- 处理空值:样本量少的情况下可以选择填充均值,也可以直接删除带空值的行
- 加入空值校验逻辑,确认输入数据合规后再送入模型训练
修复后完整代码
import sklearn import pandas as pd import numpy as np from sklearn import linear_model # 读取CSV data = pd.read_csv("pr.csv", sep=";") # 选中需要的字段并统一转为数值类型 use_cols = ["pr10tournaments", "pr10tournamentsv2", "pr10tournamentsv3", "pr10tournamentsv4", "pr10tournamentsv5"] data = data[use_cols].apply(pd.to_numeric, errors='coerce') # 处理空值,这里用均值填充,也可以换成data = data.dropna()直接删空行 data = data.fillna(data.mean()) # 校验是否还有空值 print("各字段空值数量:\n", data.isnull().sum()) predict = "pr10tournaments" x = np.array(data.drop([predict], axis=1)) y = np.array(data[predict]) x_train, x_test, y_train, y_test = sklearn.model_selection.train_test_split(x, y, test_size=0.1, random_state=42) linear = linear_model.LinearRegression() linear.fit(x_train, y_train) acc = linear.score(x_test,y_test) print("模型准确率:", acc)
内容的提问来源于stack exchange,提问作者Alex is funny
相关产品推荐
相关产品推荐

