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

问题背景

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

问题分析

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


先检查有哪些列存在空值


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

打印出来下面的结果:

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

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


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


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

打印出来下面的结果:

                       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 123456

之后就可以到原始数据里找计算结果在哪里出错了。
博主出错的原因是输入sigmoid函数的中间计算结果存在除0的问题,所以在sigmoid计算之后返回了NaN,但是参与计算的是一列数,所以在程序运行过程中没有打印除0的报错。
 

猜你喜欢

转载自blog.csdn.net/weixin_42587745/article/details/88995659