np.nan和np.NaN之间的区别

21

np.Nan 和 np.nan 之间有任何区别吗?据我所知,两者都用于表示空值,但是如果您看这里

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt


df = pd.DataFrame([[np.nan,2,np.nan,0],[3,4,np.nan,1],[np.nan,np.nan,np.nan,5]],columns=list('ABCD'))
print(df)
print(np.nan == np.NaN)

我获得了以下输出:

     A    B   C  D
0  NaN  2.0 NaN  0
1  3.0  4.0 NaN  1
2  NaN  NaN NaN  5
False

Process finished with exit code 0
如果它们相同,print(np.nan == np.NaN)应该返回True,为什么数据框中的值会被填充为NaN
我知道NaN不是一个数字,所以它可能是这样处理的,因此更改了数据框中的条目,但我仍然不确定。

np.nan 和 np.NaN 是相同的,它们是别名。 - B. M.
1
在PyCharm中,我得到了False。 - user10089194
7
您不应使用等号来测试 nan(非数值),因为它总是返回 False,例如 np.nan == np.nan 也是 False。但是,使用 is 操作符进行身份比较,则可以得到 True 的结果,即 np.nan is np.NaN。请参阅 NumPy 文档中的 IEEE 754 浮点特殊值 - miradulo
不是。不是空值。"不是数字"。 - Gereon
请注意,在任何符合IEEE 754标准的浮点系统中,NaN ≠ NaN都成立。因此,你几乎可以在任何地方找到这种行为,而不仅仅是在Python中。这一点一直延伸到CPU级别。 - Joooeey
3个回答

10

基本上,NaNNANnan都是表示不确定或无效数值的等价定义。

换句话说,NaNNANnan的别名。

np.nan
np.NaN
np.NAN

如果你检查它们的相等性,它会返回False

如果你检查这3个变量的类型,你会发现它们都是同一种类型(float)

但是让它

a=np.NaN
b=np.NAN
c=np.nan

现在如果你检查a、b和c的相等性,它会返回True(现在不起作用)

即使在文档(第4行)中也说:

不能使用相等性来测试NaNs

你可以从这里查看文档:

https://numpy.org/doc/stable/user/misc.html?highlight=numpy%20nan


1
实际上,a == b 也返回 Falsec 同理。 - Matĕj Mezera

2
  • 当你尝试执行np.nan is np.NAN is np.NaN时,你会得到true
  • 我已经查阅了numpy的官方文档,它说:
    • IEEE 754浮点数表示的非数字(NaN)。 NaN和NAN是nan的等效定义,请使用nan而不是NaN
    • IEEE 754浮点数表示的非数字(NaN)。 NaN和NAN是nan的等效定义,请使用nan而不是NAN

1

实际上,即使你测试: np.nan == np.nan 你也会得到 false


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接