2016-04-10 6 views
0

Ich habe den folgenden CodeStandardScaler -ValueError: Input enthält NaN, Infinity oder einen Wert zu groß für dtype ('float64')

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

Und bekam folgende Fehler:

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'). 

I verwendet:

print(np.isinf(X)) 
print(np.isnan(X)) 

, die mir gibt die Ausgabe unten. Dies konnte mir nicht wirklich sagen welches Element Probleme hat, da ich Millionen von Zeilen habe.

[[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]] 

Gibt es eine Möglichkeit zu identifizieren, welcher Wert in der Matrix X tatsächlich das Problem verursacht? Wie vermeiden Menschen es im Allgemeinen?

Antwort

5

numpy enthält verschiedene logische elementweise Tests für diese Art von Sache. In Ihrem speziellen Fall möchten Sie isinf und isnan verwenden.

Als Antwort auf Ihre edit:

Sie das Ergebnis np.isinf passieren kann() oder np.isnan(), um np.where(), die die Indizes zurück, wo eine Bedingung erfüllt ist. Hier ist ein kurzes Beispiel:

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) 

Sie können dann die Indizes verwenden, um den Inhalt des Arrays zu ersetzen:

test[bad_indices] = -1

+0

Dank. Bitte sehen Sie meine modifizierte Frage oben, ich muss die spezifischen schlechten Werte aus Millionen von Datensätzen finden ... gibt es einen guten Ansatz? – Edamame

+0

Siehe meine aktualisierte Antwort - hoffe das hilft. – Thomite

+0

Ich habe tatsächlich: ('bad_indices', (array ([], dtype = int64), array ([], dtype = int64)) von print ('bad_indices', np.where (np.isinf (X))) ... hat keinen Index zurückgegeben ... – Edamame

Verwandte Themen