ich Ihre Fehler, wenn ich ein Objekt dtype Array machen:
In [112]: arr=np.ones((3,2),object)
In [113]: arr
Out[113]:
array([[1, 1],
[1, 1],
[1, 1]], dtype=object)
In [114]: np.isnan(arr)
...
TypeError: ufunc 'isnan' not supported for the input types, and the inputs could not be safely coerced to any supported types according to the casting rule ''safe''
Das dtype
ist der einzige, der Zahlen, Strings und np.nan
(was ein Float ist) mischen kann. Sie können damit nicht viele ganze Array-Operationen ausführen.
Ich kann Ihre Lösung nicht ohne weiteres testen, da mehrere Variablen unbekannt sind.
Mit einer allgemeineren arr
, sehe ich nicht, wie Sie eine Zeile ohne Wiederholung über beide Zeilen und Spalten entfernen können, testen, ob jeder Wert numerisch ist, und wenn numerisch isnan
. np.isnan
ist wählerisch und kann nur auf einem Schwimmer arbeiten.
Wie in den "möglichen Duplikat" Pandas isnull
erwähnt ist allgemeiner.
Also im Grunde zwei Punkte:
was ein guter General Test ist, die Strings sowie Zahlen
können Sie bekommen um eine vollständige Iteration umgehen kann, das Array unter der Annahme dtype Objekt ist.
np.isnan on arrays of dtype "object" hier Meine Lösung ist es, eine Liste Verständnis in einer Schleife über ein 1D-Array zu tun.
Von dass ich jedes Element arr
mit testen:
In [125]: arr
Out[125]:
array([['str', 1],
[nan, 'str'],
[1, 1]], dtype=object)
In [136]: for row in arr:
...: for col in row:
...: print(np.can_cast(col,float) and np.isnan(col))
False
False
True
False
False
False
Mögliche Duplikat [Effizientes wenn beliebiges Objekt überprüft NaN in Python/numpy/Pandas ist?] (Http://stackoverflow.com/questions/18689512/efficiently-checking-if-arbitrary-object-is- nan-in-python-numpy-pandas) –
Es ist 2d, aber was ist der dtype? Objekt, Zeichenfolge? – hpaulj