NumPyで欠損値np.nanを含む配列ndarrayの合計や平均を算出

NumPyの配列ndarrayにひとつでも欠損値np.nanが含まれている場合、通常の関数sum()を使うと、np.nanが返される。nansum()を用いることで、欠損値np.nanを除外した値の合計が算出できます。 欠損値np.nanを含む配列ndarrayについて、np.nanを置き換えたり、np.nanが含まれる行または列を削除したりする方法については以下の記事を参照。

例として、データが欠落した以下のcsvをnp.genfromtxt()で読み込んで使います。欠落箇所が欠損値np.nanとなります。

sample_nan.csv

import numpy as np

arr = np.genfromtxt('data/src/sample_nan.csv', delimiter=',')
print(arr)
# [[ 11.  12.  nan  14.]
#  [ 21.  nan  nan  24.]
#  [ 31.  32.  33.  34.]]

欠損値np.nanを含むndarrayに対してはnansum()を使う 対象のndarrayにひとつでも欠損値np.nanが含まれている場合、NumPyの関数np.sum()やndarrayのメソッドsum()で合計を算出すると、np.nanが返される。

print(arr.sum())
# nan

print(np.sum(arr))
# nan

関数np.nansum()を使うと、欠損値np.nanを除外した値の合計が算出される。

print(np.nansum(arr))
# 212.0

sum()と同様に、引数axisを設定することで、行ごと、列ごとの合計を算出することもできます。

print(np.nansum(arr, axis=0))
# [ 63.  44.  33.  72.]

print(np.nansum(arr, axis=1))
# [  37.   45.  130.]

ndarrayのメソッドにはnansum()は無いので注意。 平均や最大、最小なども同様 平均や最大、最小、標準偏差、分散についても同様で、欠損値np.nanを除外した値を対象とする関数np.nanmean(), np.nanmax(), np.nanmin(), np.nanstd(), np.nanvar()が用意されています。

print(np.nanmean(arr))
# 23.5555555556

print(np.nanmax(arr))
# 34.0

print(np.nanmin(arr))
# 11.0

print(np.nanstd(arr))
# 8.90831211237

print(np.nanvar(arr))
# 79.3580246914

シェア

関連カテゴリー

Python NumPy

NumPy配列ndarrayを任意の最小値・最大値に収めるclip NumPy配列ndarrayの次元をEllipsis(...)で省略して指定 NumPyで条件に応じた処理を行うwhereの使い方 Python, NumPyで画像処理(読み込み、演算、保存) NumPy配列ndarrayに要素・行・列を挿入、追加するinsertの使い方 pandas.DataFrame, SeriesとNumPy配列ndarrayを相互に変換 NumPy配列ndarrayをイミュータブル(書き換え禁止)に設定 Python, OpenCV, Pillow(PIL)で画像サイズ(幅、高さ)を取得 NumPyのeyeまたはidentityでone-hot表現に変換 NumPy配列ndarrayをprint表示で省略するかしないか設定 Python, NumPyで行列の演算(逆行列、行列式、固有値など) NumPy配列ndarrayのスライスによる部分配列の選択と代入 NumPyのブロードキャスト(形状の自動変換) NumPyで任意の行・列を削除するdeleteの使い方 NumPy配列ndarrayを分割(split, array_split, hsplit, vsplit, dsplit)

Last Updated: 6/26/2019, 10:34:03 PM