NumPyの配列ndarrayの欠損値np.nanを他の値に置換

NumPyの配列ndarrayの欠損値np.nanを他の値に置換する場合、np.isnan()を利用したブールインデックス参照を行う。任意の値に置き換えたり、np.nanを除外した値の平均値に置き換えたりできます。 なお、欠損値np.nanを他の値で置換するのではなく削除する場合は、以下の記事を参照。

また、pandasを使う場合は、欠損値を操作する方法が別途用意されています。

例として、データが欠落した以下の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.]]

genfromtxt()の引数filling_valuesを指定

元となるcsvファイルのデータが欠落している場合、np.genfromtxt()で読み込むときに引数filling_valuesを指定すると、欠落箇所を任意の値で埋めることができます。 例えば、0で埋めたい場合は以下の通り。

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

ブールインデックス参照で欠損値np.nanを置換

欠損値np.nanか否かを判定する関数np.isnan()を使って、np.nanの位置がTrueとなるndarrayを取得できます。

print(np.isnan(arr))
# [[False False  True False]
#  [False  True  True False]
#  [False False False False]]

これを利用して、欠損値np.nanの位置に任意の値を代入することで、np.nanを置き換えることができます。 0に置換したい場合は以下の通り。

arr[np.isnan(arr)] = 0
print(arr)
# [[ 11.  12.   0.  14.]
#  [ 21.   0.   0.  24.]
#  [ 31.  32.  33.  34.]]

欠損値np.nanを除外した値の平均を算出する関数np.nanmean()を利用して、平均値に置き換えることも可能。

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

シェア

関連カテゴリー

Python NumPy

NumPyのsortとargsort関数で任意の行・列を基準にソート NumPy配列ndarrayの形状を変換するreshapeの使い方と-1の意味 Python, NumPyでグラデーション画像を生成 Pythonで正規化・標準化(リスト、NumPy配列、pandas.DataFrame) NumPyでCSVファイルを読み込み・書き込み(入力・出力) NumPy配列ndarrayのスライスによる部分配列の選択と代入 NumPyで空の配列ndarrayを生成するemptyとempty_like NumPy配列ndarrayの最大値・最小値のインデックス(位置)を取得 Pythonのリストと配列とnumpy.ndarrayの違いと使い分け NumPy配列ndarrayの次元数、形状、サイズ(全要素数)を取得 pandas参考書『Pythonによるデータ分析入門』の注意点 NumPyで任意の行・列を削除するdeleteの使い方 NumPyでRGB画像の色チャンネルを分離して単色化、白黒化、色交換 pandasからNumPyの関数などを使う方法(pd.np) NumPy配列ndarrayに要素・行・列を挿入、追加するinsertの使い方

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