arraysnumpynan

Difference between np.nan and np.NaN


Is there any difference between np.Nan and np.nan? As per my understanding both are used for null values but if you look here

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)

I get following output:

     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

Now if these are same print(np.nan == np.NaN) should return True and why are the values in dataframe populated as NaN?

I get NaN is not a number so it might be treating it that way and hence changing the entry in dataframe but I am still not sure.


Solution

  • so basically NaN,NAN and nan are equivalent definitions of nan

    or in other words

    NaN and NAN are aliases of nan

    np.nan
    np.NaN
    np.NAN
    

    if you will check the equality of these it returns False

    and if you check the types of all these 3 then you will find that all are of same type(float)

    but let

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

    now if you will check the equality of a,b and c it returns True (it won't work now)

    Even in the documentation(line 4) it is said that:-

    cannot use equality to test NaNs

    you can check the documentation from here:-

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