はじめに
本記事では、NumPy配列におけるNaN(Not a Number)値の取り扱いについて詳しく解説します。データ分析や科学計算においてよく遭遇する欠損値の検出方法、NaNを含む配列の演算処理、欠損値の置換や削除のテクニックなど、実践的な手法を豊富なコード例とともに紹介していきます。
解説
データの生成
配列の一部をNaNにする
2番目の要素をnp.nanとすることでNaNにできます。
NaNであるかの判定
np.isnan(x)でNaNの部分がTrueとなった配列が返ります。
NaNであるインデックスを取得
np.whereとnp.isnan(x)を組み合わせることでNaNである部分のインデックスが得られます。結果はtupleで得られるので、[0]とすることでnp.arrayで結果が得られます。
NaNではないインデックスを取得
~np.isnan(x)のように否定演算子をつけることでNaNではないインデックスを得ることができます。
配列中のNaNを除去
上記のNaNではないインデックスを配列に適用することでNaNを除去できます。
配列中のNaNを他の値に置換
np.nan_to_num()関数は、第一引数にNaNを含む配列を指定し、第2引数でNaNを置換する値を指定します。
x==np.nanのようにしても置換することはできません。
NaNの数をカウント
np.count_nonzero()関数はTrueの個数を計算するため、np.isnanと組み合わせることで配列内のNaNの数を簡単に把握できます。
NaNを除外して計算
合計
NaNを含む配列の合計を計算するにはnp.nansum()を用います。通常の合計計算では、NaNが1つでも含まれていると計算結果全体がNaNになってしまいます。
平均
中央値
標準偏差
累積和
最大値のインデックス
最小値のインデックス
最小値&最大値
パーセンタイル
コードをダウンロード(.pyファイル)
コードをダウンロード(.ipynbファイル)
DataFrameにおけるNan,Noneについて
pandasのDataFrameにおけるNaNとNoneの扱いについては、下記記事で詳しく説明しています。

[pandas] 7. DatarFrameの欠損値(NaN, None)について
PandasのDataFrameにおける欠損値(NaN、None)の特性と処理方法について解説。欠損値の検出方法、処理方法、そして実践的な対処法を具体的なコード例とともに紹介し、効果的なデータクリーニングのテクニックを提供します。
参考
numpy.isnan — NumPy v2.3 Manual
numpy.nansum — NumPy v2.3 Manual
Constants — NumPy v2.3 Manual

コメント