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

来源:互联网 发布:云计算数据中心 编辑:程序博客网 时间:2024/05/18 14:42

问题背景

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

问题分析

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

  • 先检查有哪些列存在空值
 data = pd.read_csv('filename.csv') print(data.isnull().any())

打印出来下面的结果:

date           Falsepredict         Truetime           Falsetrue_value     Falsemeasure        Falsedtype: bool

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

  • 接下来我们可以查看出现空值的是哪些记录
predict_null = pd.isnull(data['predict'])data_null = data[predict_null == True]print(data_null)

打印出来下面的结果:

                       date      predict                 time  true_value301258  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的报错。

阅读全文
0 0
原创粉丝点击