2012-07-12 17 views
50

基本的に、私はいくつかのデータ分析を行っています。私はnumpy.ndarrayとしてデータセットを読み込み、いくつかの値が欠落しています(ちょうどそこにいないか、NaNであるか、 "NA"と書かれた文字列です)。numpy.ndarrayの数値以外の値を含むすべての行を削除する方法

このようなエントリを含むすべての行を削除します。私はどうやってそれをnumpyのndarrayで行うのですか?

答えて

98
>>> 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に再割り当てしてください。

説明:は、Trueと同じ配列を返します。ここで、NaN,Falseは他の場所です。 .any(axis=1)~True/Falseを反転しa[ ]は括弧内Trueを有する元の配列からだけの行を選択し、全体の行の論理or操作でnからm*nアレイを減少させます。

+0

ありがとうございます。これが何をしているのかを説明することは可能でしょうか?まだnumpyに少し新しく:) – zebra

+0

@zebra - 説明しました。 – eumiro

+3

'np.isfinite'はこの場合にも有用で、'±Inf'値を取り除きたいときにも便利です。有限の実数に対してのみ真を返すので、 '〜'は必要ありません。 – naught101

関連する問題