2016-04-10 10 views
0

が含まれています、私は次のコードStandardScaler -ValueError:入力がNaN、無限大またはDTYPEのためにあまりにも大きな値( 'のfloat64')

X = df_X.as_matrix(header[1:col_num]) 
scaler = preprocessing.StandardScaler().fit(X) 
X_nor = scaler.transform(X) 

を持っており、次のエラー得た:

File "/Users/edamame/Library/python_virenv/lib/python2.7/site-packages/sklearn/utils/validation.py", line 54, in _assert_all_finite 
    " or a value too large for %r." % X.dtype) 
ValueError: Input contains NaN, infinity or a value too large for dtype('float64'). 

私が使用:

私に与え
print(np.isinf(X)) 
print(np.isnan(X)) 

を以下の出力。これは、私に何百万行もの行があるので、どの要素に問題があるのか​​を本当に教えてくれませんでした。

[[False False False ..., False False False] 
[False False False ..., False False False] 
[False False False ..., False False False] 
..., 
[False False False ..., False False False] 
[False False False ..., False False False] 
[False False False ..., False False False]] 

マトリックスXのどの値が実際に問題を引き起こすのかを特定する方法はありますか?人々はそれを一般的にどのように避けますか?

答えて

5

numpyには、このようなことに関するさまざまな論理的な要素ごとのテストが含まれています。

具体的なケースでは、isinfisnanを使用します。あなたの編集に対応して

あなたはnp.isinfの結果を渡すことができます()またはnp.isnan()条件が真のインデックスを返します。これは、()np.whereします。

import numpy as np 

test = np.array([0.1, 0.3, float("Inf"), 0.2]) 

bad_indices = np.where(np.isinf(test)) 

print(bad_indices) 

あなたは、配列の内容を置き換えるために、これらの指標を使用することができます:

test[bad_indices] = -1

+0

おかげでここでは簡単な例です。上記の私の変更された質問を参照してください、私は何百万ものレコードから特定の悪い値を見つける必要があります...良いアプローチはありますか? – Edamame

+0

私の更新された回答を参照してください - これが役立つことを願っています。 – Thomite

+0

print( 'bad_indices'、np.where(np.isinf(X)))から、実際には:( 'bad_indices'、(配列([]、dtype = int64)、配列([]、dtype = int64) )...インデックスを返しませんでした... – Edamame

関連する問題