【问题标题】:Difference between np.nan and np.NaNnp.nan 和 np.NaN 之间的区别
【发布时间】:2019-04-25 10:55:37
【问题描述】:

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 是 True。他们是别名。
  • 在 pycharm 中,我得到了错误。
  • @user10089194 你不应该使用相等来测试nans,它总是返回False。即np.nan == np.nan 也是False。但是用isnp.nan is np.NaN 测试身份是True。请参阅 NumPy 文档中的 IEEE 754 Floating Point Special Values
  • both are used for null values - 没有。不为空。 “不是数字”。

标签: arrays numpy nan


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    基本上就是这样 NaN,NANnan 是 nan 的等价定义

    或者换句话说

    NaNNANnan 的别名

    np.nan
    np.NaN
    np.NAN
    

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

    如果你检查所有这 3 个的类型,你会发现它们都是相同的 type(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

    【讨论】:

      猜你喜欢
      • 2017-05-11
      • 2019-10-17
      • 1970-01-01
      • 2020-04-30
      • 2019-07-30
      • 2020-12-11
      • 2021-04-17
      • 2020-05-23
      • 1970-01-01
      相关资源
      最近更新 更多