【Pandas超入門】欠損値NaNの判定と個数カウントをマスターしてデータを見える化しよう!
データ分析を始めたばかりの方にとって、**欠損値(NaN: Not a Number)**の扱いは最初の難関の一つかもしれません。しかし、Pandasを使えば、欠損値の有無を判定したり、その個数をカウントしたりするのは非常に簡単です。この記事では、PandasでDataFrameやSeriesに含まれるNaNを検出し、その数を正確に把握するための基本的なメソッドを、短いサンプルコードと丁寧な解説でご紹介します。
欠損値NaNとは?なぜNaNを検出・カウントするの?
NaNは、データがない、無効な値、または計算結果が未定義であることを示す特別な浮動小数点値です。データ入力ミス、データ収集時の問題、あるいは結合処理などによって、DataFrameやSeriesにNaNが混入することは頻繁にあります。
NaNを検出・カウントする理由は主に以下の通りです。
-
データ品質の把握: 欠損値の多さから、データの信頼性や完全性を評価できます。
-
前処理の必要性判断: 欠損値が多すぎる場合、削除や補完などの前処理が必要になります。
-
分析の正確性向上: 欠損値を含むデータで統計処理を行うと、結果が歪む可能性があります。
PandasでNaNを判定する
Pandasでは、欠損値を判定するための直感的なメソッドが用意されています。
isnull() または isna() を使う
isnull()(またはそのエイリアスであるisna())メソッドは、各要素が欠損値(NaN, None, pd.NAなど)であるかどうかを判定し、ブール値(True/False)のDataFrameまたはSeriesを返します。
import pandas as pd
import numpy as np # NaNを使うために必要
# サンプルDataFrameの作成
df = pd.DataFrame({
'A': [1, 2, np.nan, 4],
'B': ['apple', 'banana', None, 'grape'], # Noneも欠損値として扱われる
'C': [True, False, pd.NA, True] # pd.NAも欠損値として扱われる
})
print("オリジナルDataFrame:\n", df)
# 欠損値の判定
print("\n欠損値の判定 (df.isnull()):\n", df.isnull())
解説:
-
df.isnull()を実行すると、元のDataFrameと同じ構造で、各要素が欠損値であればTrue、そうでなければFalseとなる新しいDataFrameが生成されます。 -
np.nan、Python標準のNone、そしてPandasのpd.NAはすべてTrueと判定されます。
notnull() または notna() を使う
notnull()(またはそのエイリアスであるnotna())メソッドはisnull()の逆で、各要素が欠損値でないかどうかを判定します。
# 欠損値ではない値の判定
print("\n欠損値ではない値の判定 (df.notnull()):\n", df.notnull())
解説:
-
notnull()は、欠損値であればFalse、そうでなければTrueを返します。
PandasでNaNの個数をカウントする
欠損値の有無だけでなく、その個数を把握することはデータセット全体の状態を理解するために非常に重要です。
各列のNaNの個数をカウントする
isnull()の出力に対してsum()メソッドを適用することで、各列のNaNの合計数を簡単にカウントできます。Trueは1、Falseは0として計算されるため、sum()がNaNの個数になります。
# 各列のNaNの個数をカウント
print("\n各列のNaNの個数:\n", df.isnull().sum())
解説:
-
df.isnull()で生成されたブール値のDataFrameに対してsum()を適用すると、デフォルトで列ごとにTrueの数を合計します。これにより、各列にいくつのNaNが含まれているかが一目でわかります。
DataFrame全体のNaNの合計をカウントする
DataFrame全体のNaNの合計数を取得したい場合は、sum()を2回適用します。
# DataFrame全体のNaNの合計個数
print("\nDataFrame全体のNaNの合計個数:", df.isnull().sum().sum())
解説:
-
最初の
sum()で各列のNaNの個数がSeriesとして得られ、そのSeriesに対してもう一度sum()を適用することで、全体の合計が算出されます。
NaN以外の値の個数をカウントする (非null値)
各列にいくつの有効な値(NaNでない値)があるかを知りたい場合は、notnull().sum()を使うか、DataFrameのinfo()メソッドを確認します。
# 各列のNaN以外の値の個数
print("\n各列のNaN以外の値の個数:\n", df.notnull().sum())
# info()メソッドで非null値の個数を確認
print("\nDataFrame情報 (df.info()):")
df.info()
解説:
-
df.notnull().sum()は、各列のFalseではない値(つまり有効な値)の数を合計します。 -
df.info()は、DataFrameの概要情報を提供し、各列のNon-Null Count(非null値の数)を直接確認できます。これは、データ型の確認と合わせて非常に便利なメソッドです。
まとめ
Pandasで欠損値NaNを検出・カウントする方法は、データ分析の基本的なスキルです。isnull()やnotnull()で欠損値の有無を判定し、sum()を組み合わせることでその個数を正確に把握できます。これらのメソッドを使いこなすことで、データセットの品質を迅速に評価し、その後のデータ前処理や分析をより効果的に進めることができるでしょう。

