Python NaNの判定

私はNaNじゃ

NaNの判定について気になるところがあったのでまとめる.ちなみにNaNは”Not a Number”の頭文字.読み方はそのままナン

お馴染みのちょっと厄介なやつです.

In [1]:
import numpy as np

#numpyはnanを作ってくれる

hoge = np.nan

print(hoge)
nan

普通にnanが出力される.次にNaNの判定について.

In [2]:
if hoge == np.nan:
    print("True")
else:
    print("False")
False

あれっ?ってなる.NaNを普段扱う,整数とか文字列とかと同じ感覚で扱ってはいけないですね.

ではどのように判定するか.Pythonの挙動として一番簡単な方法は自分と自分を比べる方法である.ほかにはmathパッケージのisnanを使う方法もある.前者は戻り値FalseNaNを意味することに注意.

In [3]:
if hoge == hoge:
    print("True")
else:
    print("Flase")
False
In [4]:
import math

hoge2 = np.pi


print(math.isnan(hoge))
print("------")
print(math.isnan(hoge2))
True
------
False

おわりに

hoge == hogeの方法は単純だしわかりやすいが,リストの要素を対象としてhoge[i] == hoge[i]とかやってしまうと,実行速度が心配になる...

1