您的位置:首页 > 产品设计 > UI/UE

ValueError: Input contains NaN, infinity or a value too large for dtype('float64')问题解决

2017-12-21 16:17 1911 查看

问题背景

博主在调用sklearn.metrics.roc_auc_score()计算AUC时出现了这个报错

问题分析

错误提示说数据里面包含空值或者无穷大的数据,参与计算的两列数据有一列不是1就是0,另一列是楼主自己写的sigmoid函数计算出来的值,但是sigmoid函数不太可能算出无穷大的数值,所以关注是不是有哪个数出问题算出空值了。

先检查有哪些列存在空值

data = pd.read_csv('filename.csv')
print(data.isnull().any())


打印出来下面的结果:

date           False
predict         True
time           False
true_value     False
measure        False
dtype: bool


说明predict列存在空值,确实是sigmoid函数算出来的结果出了问题。

接下来我们可以查看出现空值的是哪些记录

predict_null = pd.isnull(data['predict'])
data_null = data[predict_null == True]
print(data_null)


打印出来下面的结果:

date      predict                 time  true_value
301258  2017-08-22 07:14:31          NaN  2017-08-22 07:14:31           0
301259  2017-08-22 07:14:46          NaN  2017-08-22 07:14:46           0
301260  2017-08-22 07:15:01          NaN  2017-08-22 07:15:01           0
301261  2017-08-22 07:15:16          NaN  2017-08-22 07:15:16           0
301262  2017-08-22 07:15:31          NaN  2017-08-22 07:15:31           0


之后就可以到原始数据里找计算结果在哪里出错了。

博主出错的原因是输入sigmoid函数的中间计算结果存在除0的问题,所以在sigmoid计算之后返回了NaN,但是参与计算的是一列数,所以在程序运行过程中没有打印除0的报错。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  数据 sklearn dataframe
相关文章推荐