How can I check for NaN values?

后端 未结 17 1887
盖世英雄少女心
盖世英雄少女心 2020-11-22 05:02

float(\'nan\') results in Nan (not a number). But how do I check for it? Should be very easy, but I cannot find it.

相关标签:
17条回答
  • 2020-11-22 05:49

    All the methods to tell if the variable is NaN or None:

    None type

    In [1]: from numpy import math
    
    In [2]: a = None
    In [3]: not a
    Out[3]: True
    
    In [4]: len(a or ()) == 0
    Out[4]: True
    
    In [5]: a == None
    Out[5]: True
    
    In [6]: a is None
    Out[6]: True
    
    In [7]: a != a
    Out[7]: False
    
    In [9]: math.isnan(a)
    Traceback (most recent call last):
      File "<ipython-input-9-6d4d8c26d370>", line 1, in <module>
        math.isnan(a)
    TypeError: a float is required
    
    In [10]: len(a) == 0
    Traceback (most recent call last):
      File "<ipython-input-10-65b72372873e>", line 1, in <module>
        len(a) == 0
    TypeError: object of type 'NoneType' has no len()
    

    NaN type

    In [11]: b = float('nan')
    In [12]: b
    Out[12]: nan
    
    In [13]: not b
    Out[13]: False
    
    In [14]: b != b
    Out[14]: True
    
    In [15]: math.isnan(b)
    Out[15]: True
    
    0 讨论(0)
  • 2020-11-22 05:50

    Well I entered this post, because i've had some issues with the function:

    math.isnan()
    

    There are problem when you run this code:

    a = "hello"
    math.isnan(a)
    

    It raises exception. My solution for that is to make another check:

    def is_nan(x):
        return isinstance(x, float) and math.isnan(x)
    
    0 讨论(0)
  • 2020-11-22 05:51

    math.isnan(x)

    Return True if x is a NaN (not a number), and False otherwise.

    >>> import math
    >>> x = float('nan')
    >>> math.isnan(x)
    True
    
    0 讨论(0)
  • 2020-11-22 05:53

    For nan of type float

    >>> import pandas as pd
    >>> value = float(nan)
    >>> type(value)
    >>> <class 'float'>
    >>> pd.isnull(value)
    True
    >>>
    >>> value = 'nan'
    >>> type(value)
    >>> <class 'str'>
    >>> pd.isnull(value)
    False
    
    0 讨论(0)
  • 2020-11-22 05:54

    I actually just ran into this, but for me it was checking for nan, -inf, or inf. I just used

    if float('-inf') < float(num) < float('inf'):
    

    This is true for numbers, false for nan and both inf, and will raise an exception for things like strings or other types (which is probably a good thing). Also this does not require importing any libraries like math or numpy (numpy is so damn big it doubles the size of any compiled application).

    0 讨论(0)
  • 2020-11-22 05:56

    Here are three ways where you can test a variable is "NaN" or not.

    import pandas as pd
    import numpy as np
    import math
    
    #For single variable all three libraries return single boolean
    x1 = float("nan")
    
    print(f"It's pd.isna  : {pd.isna(x1)}")
    print(f"It's np.isnan  : {np.isnan(x1)}")
    print(f"It's math.isnan : {math.isnan(x1)}")
    

    Output

    It's pd.isna  : True
    It's np.isnan  : True
    It's math.isnan  : True
    
    0 讨论(0)
提交回复
热议问题