note.nkmk.me

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

Date: 2018-01-30 / tags: Python, NumPy

NumPyの配列ndarrayにひとつでも欠損値np.nanが含まれている場合、通常の関数sum()を使うと、np.nanが返される。nansum()を用いることで、欠損値np.nanを除外した値の合計が算出できる。

欠損値np.nanを含む配列ndarrayについて、np.nanを置き換えたり、np.nanが含まれる行または列を削除したりする方法については以下の記事を参照。

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

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
スポンサーリンク
シェア
このエントリーをはてなブックマークに追加

関連カテゴリー

関連記事