【NANって何だ?】意味・pythonでの使い方を解説します!

こんにちは!ライターの遠藤です。

突然ですが、”NaN”ってご存知でしょうか?

この記事では、
「NaNって何?」
「PythonでNaNの判定の仕方がわからない」

という方に向けて、

【基礎】NaNとは?
【応用】PythonにおけるNaNの判定方法

について簡潔にまとめました。

この記事を読めばNaNの意味と性質、判定方法が分かります。

ぜひ最後までお付き合いください!

本記事を読む前に、Pythonがどんなプログラミング言語なのかをおさらいしておきたい人は次の記事を参考にしてください。

→ Pythonとは?特徴やできること、活用例をわかりやすく簡単に解説

なお、その他のPythonの記事についてはこちらにまとめています。

目次

NaNとは?

まずはじめにNaNの意味とは、「Not a Number」の略です。

つまり、非数ですね。

読み方はシンプルに、「ナン」です。

Noneと似ているのですが、別物なので要注意です。

NaNは浮動小数点における考え方で、実数が異常な値であることを示しています。

NaNになるケースは様々ありますが、よくある例ではcsvファイル等を読み込んだ際、入力が無い場合などに非数となります。

「NaNの時は0を代入する」といった処理をしたい場合などに使えます。

NaNの判定方法

pythonでNaNを判定するには、いくつかの方法があります。

以降では具体的な判定方法を3つ紹介します。

自分自身と比較する

NaNには特別な性質があります。

それは
・NaNの四則演算の結果はNaNとなる
・NaNの比較演算は必ずFalseとなる

という点です。

この性質を利用し、自分自身と比較することでNaNかどうかの判定を行うことができます。

具体的な例は以下になります。

import numpy as np

Nan = np.nan #ここでNaNを生成しています

if Nan == Nan:
    print ("This is not NaN")
else:
    print ("This is NaN")

普通の値であれば自分自身と比較すれば当然イコールとなるのですが、NaNの場合はその性質からイコールになりません。

そんな性質を利用した比較方法です。

実行結果:

This is NaN

isnanを使う(numpy)

続いて紹介する方法は、isnan()という関数によって判定する方法です。

これを実行するには、nampyをインポートする必要があります。

ただ、numpyは環境によって含まれていない場合がありますので、もしエラーが出た場合はnumpyをインストールしてください。

$ pip install numpy

上記のコマンドでインストールができます。

さて、numpyのisnan()を利用した実際の判定方法を確認してみましょう。

import numpy as np

Nan = np.nan

if np.isnan(Nan):
    print ("This is NaN")
else:
    print ("This is not NaN")

isnan()ではNaNかどうかを判定するので、対象となる値がNaNの時にTrueとなります。

mathを使う

続いてmathのisnan()を使った方法を紹介します。

こちらは標準のライブラリに入っているため、numpyよりハードルは低めと思われます。

import math

Nan = math.nan

if math.isnan(Nan):
    print ("This is NaN")
else:
    print ("This is not NaN")

結果は他の例と同じです。

まとめ

いかがでしたでしょうか?

今回の記事では、
【基礎】NaNとは?
【応用】PythonにおけるNONの判定方法

について解説致しました。

NaNという単語は人によっては見慣れないものかと思いますが、性質さえ分かれば比較的簡単に理解ができるかと思います。

もしプログラミングの中でNaNを使うことがあれば、ぜひこの記事を思い出してNaNの考え方を使いこなしてください!

この記事を書いた人

【プロフィール】
DX認定取得事業者に選定されている株式会社SAMURAIのマーケティング・コミュニケーション部が運営。「質の高いIT教育を、すべての人に」をミッションに、IT・プログラミングを学び始めた初学者の方に向け記事を執筆。
累計指導者数4万5,000名以上のプログラミングスクール「侍エンジニア」、累計登録者数1万8,000人以上のオンライン学習サービス「侍テラコヤ」で扱う教材開発のノウハウ、2013年の創業から運営で得た知見に基づき、記事の執筆だけでなく編集・監修も担当しています。
【専門分野】
IT/Web開発/AI・ロボット開発/インフラ開発/ゲーム開発/AI/Webデザイン

目次