Python:无法将float NaN转换为整数

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python:无法将float NaN转换为整数相关的知识,希望对你有一定的参考价值。

我应用一个返回浮动的移动平均逻辑。我将该float转换为int,然后将其用于在OpenCV中绘制线但是低于错误

ValueError: cannot convert float NaN to integer

示例代码

def movingAverage(avg, new_sample, N=20):
    if (avg == 0):
    return new_sample
    avg -= avg / N;
    avg += new_sample / N;
    return avg;

x1 = int(avgx1) #avgx1 is returned from the movingaverage function
y1 = int(avgy1) 
x2 = int(avgx2)
y2 = int(avgy2)
cv2.line(img, (x1, y1), (x2, y2), [255,255,255], 12)

有关如何解决的任何建议?

答案

根据你发布的内容,你的movingAverage()函数在某些时候返回NaN

NaN是一个特殊的浮点标记值,意思是“不是数字”。一般来说,Python更喜欢引发返回NaN的异常,所以像sqrt(-1)log(0.0)这样的东西通常会提高而不是返回NaN。但是,您可以从其他库中获取此值。一个很好的例子可能是尝试从电子表格中的字符串单元格中提取数值。

标准Python提供math.isnan(x),您可以使用它来测试NaN。您可以使用assert来对抗它,在找到它时引发异常,或者您可以为NaN提供替换值。

您似乎正在绘制图表或图表。我的建议是专门尝试识别这个问题(为什么你得到这个特定的NaN),然后写一些代码来提供替代品。

例如,您可能确定电子表格中的列标题负责NaN的此特定实例,并修复代码以跳过列标题。但是,为了防止以后再次出现,你可以检查isnan()函数中的movingAverage(),并用0或最大值替换任何值,有效地将NaN视为0或无穷大,无论哪个更适合你的图形。

另一答案

看来你的movingAverage()函数返回NaN值。

尝试

import numpy
int(numpy.nan)

会给你

ValueError: cannot convert float NaN to integer

测试NaN

import math, numpy
math.isnan(numpy.nan) 
另一答案

你也可以用:

    import numpy
    if numpy.isnan(value):
        value = numpy.nan_to_num(value)

这会将NaN值更改为(可能为0.0),然后可以将其转换为整数。我可能会检查以确保它变为0适用于您的数据。

以上是关于Python:无法将float NaN转换为整数的主要内容,如果未能解决你的问题,请参考以下文章

Pandas:ValueError:无法将浮点 NaN 转换为整数

调用 scipy.stats.multivariate_normal 后,pylab.plot“无法将浮点 NaN 转换为整数”

我如何清理此数据类型对象并将其转换为float类型,并保持Null和NaN

阻止 Pandas 将 int 转换为 float

将包含字符串和 NAN 的列转换为 Pandas 中的整数列表

python中怎么把string转换成int