user10089194
user10089194

Reputation: 359

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.

Upvotes: 23

Views: 13067

Answers (3)

ry j
ry j

Reputation: 31

When you try np.nan is np.NAN is np.NaN, you will get true

I have searched the offical doc of numpy, it says:

numpy.NaN

IEEE 754 floating point representation of Not a Number (NaN).

NaN and NAN are equivalent definitions of nan. Please use nan instead of NaN.

numpy.NAN

IEEE 754 floating point representation of Not a Number (NaN).

NaN and NAN are equivalent definitions of nan. Please use nan instead of NAN.

Upvotes: 3

Anurag Dabas
Anurag Dabas

Reputation: 24304

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

Upvotes: 10

salama4ai
salama4ai

Reputation: 11

actually even if you test: np.nan == np.nan you would get false

Upvotes: 1

Related Questions