数値以外の値を含むnumpy.ndarrayのすべての行を削除する方法


95

基本的に、私はいくつかのデータ分析を行っています。データセットをnumpy.ndarrayとして読み取りましたが、値の一部が欠落しています(存在しない、存在するNaN、または " NA"と記述された文字列である)。

このようなエントリを含むすべての行をクリーンアップしたいと思います。numpy ndarrayでそれを行うにはどうすればよいですか?

回答:


164
>>> a = np.array([[1,2,3], [4,5,np.nan], [7,8,9]])
array([[  1.,   2.,   3.],
       [  4.,   5.,  nan],
       [  7.,   8.,   9.]])

>>> a[~np.isnan(a).any(axis=1)]
array([[ 1.,  2.,  3.],
       [ 7.,  8.,  9.]])

これをに再割り当てしaます。

説明:where 、他の場所でnp.isnan(a)同様の配列を返します。配列を行全体に対する論理演算でに縮小し、元の配列から括弧内にある行のみを反転して選択します。TrueNaNFalse.any(axis=1)m*nnor~True/Falsea[ ]True


11
np.isfiniteこの場合や、±Inf値を削除したい場合にも役立ちます。~有限の実数に対してのみtrueを返すため、は必要ありません。
naught101 2016

7
@ naught101もに変更anyする必要がありallます。「どれもnanではない」行を選択するのではなく、「すべてが有限」である行を選択したいので。
AnnanFay 2017
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.