1. ホーム
  2. python

[解決済み] nan値を0にする

2022-10-21 15:26:58

質問

2次元のnumpy配列を持っています。この配列のいくつかの値は NaN . 私はこの配列を使用して特定の操作を実行したい。例えば、この配列を考えてみましょう。

[[   0.   43.   67.    0.   38.]
 [ 100.   86.   96.  100.   94.]
 [  76.   79.   83.   89.   56.]
 [  88.   NaN   67.   89.   81.]
 [  94.   79.   67.   89.   69.]
 [  88.   79.   58.   72.   63.]
 [  76.   79.   71.   67.   56.]
 [  71.   71.   NaN   56.  100.]]

私は一度に1つの行を取り、それを逆順にソートして、行から最大3つの値を取得し、それらの平均を取得しようとしています。私が試したコードは次のとおりです。

# nparr is a 2D numpy array
for entry in nparr:
    sortedentry = sorted(entry, reverse=True)
    highest_3_values = sortedentry[:3]
    avg_highest_3 = float(sum(highest_3_values)) / 3

を含む行では動作しません。 NaN . 私の質問は、すべての NaN の値をゼロに変換して、ソートやその他の私が行おうとしていることに問題がないようにする簡単な方法はありますか?

どのように解決するのですか?

これは動作するはずです。

from numpy import *

a = array([[1, 2, 3], [0, 3, NaN]])
where_are_NaNs = isnan(a)
a[where_are_NaNs] = 0

上記の場合 where_are_NaNs は。

In [12]: where_are_NaNs
Out[12]: 
array([[False, False, False],
       [False, False,  True]], dtype=bool)