Seite 1 von 1
Numpy isnan() Methode
Verfasst: Mittwoch 26. Oktober 2022, 13:17
von vinc00
Hallo zusammen,
ich muss bei einer CSV Datei alle Zeilen löschen, wo Nan vorkommt. Das array heißt data. Meine Lösung wäre:
length = len(data)
for i in range(0, length, 1):
if np.isnan(data[i, 1]):
np.delete(data, i, 0)
return data
Allerdings funktioniert es nicht. Kann mir jemand vielleicht helfen?
Re: Numpy isnan() Methode
Verfasst: Mittwoch 26. Oktober 2022, 13:53
von einfachTobi
Verwende keine Schleifen auf Numpy-Arrays. Wenn man das macht, macht man nahezu immer etwas verkehrt.
Re: Numpy isnan() Methode
Verfasst: Mittwoch 2. November 2022, 09:59
von vinc00
Kann ich auf diese Weise auch bestimmte Werte löschen. Also bis jetzt habe ich das so gemacht:
length = len(data)
for i in range(0, length, 1):
if 0.0005 < data[i, 0]%0.0025 < 0.9995:
np.delete(data, i, 0)
geht das auch leichter?
Re: Numpy isnan() Methode
Verfasst: Mittwoch 2. November 2022, 10:52
von vinc00
Außerdem wenn ich "data = data[~np.isnan(data)]" benutzte macht der aus meinem 2D- ein 1D-Array
Re: Numpy isnan() Methode
Verfasst: Mittwoch 2. November 2022, 11:15
von Sirius3
Wenn man mit numpy for-Schleifen über einzelne Elemente benutzt, dann macht man mit großer Wahrscheinlichkeit etwas falsch. Array-Größen per np.append oder np.delete zu verändern bedeutet auch in 99% der Fälle, dass man nicht richtig mit Arrays arbeitet.
Dich interessiert ja auch nur die Nan-Werte in der zweiten Spalte:
Wenn man Modulo 0.0025 rechnet, dann können niemals Zahlen größer als 0.0025 auftauchen, die Bedingung der oberen Grenze macht so also keinen Sinn. Mehrere Bedingungen bei Inidizierung muß man mit Bit-Operatoren (&, |, ~) ausdrücken nicht mit den logischen Operatoren (and, or, not).
Re: Numpy isnan() Methode
Verfasst: Mittwoch 2. November 2022, 15:53
von __blackjack__
Ergänzung: Bei den Bit-Operatoren muss man dann noch auf den Operatorvorrang achten und gegebenenfalls Klammern setzen.
Re: Numpy isnan() Methode
Verfasst: Donnerstag 3. November 2022, 17:24
von vinc00
Also wäre soetwas wie, das folgende möglich?
data = data[~np.isnan(data[:,1]) & ~(data[:,0]-data[:-1,0]<0,.0025)]
oder kann Python damit nichts anfangen?
Re: Numpy isnan() Methode
Verfasst: Donnerstag 3. November 2022, 17:29
von __deets__
Um die Frage zu beantworten, musst du das doch nur mal in Python laufen lassen. Hast du das nicht probiert? Das geht schneller, als hier ein Posting zu erstellen.
Re: Numpy isnan() Methode
Verfasst: Donnerstag 3. November 2022, 17:30
von __blackjack__
Ich vermute das wird ein ``TypeError: bad operand type for unary ~: 'tuple'`` geben weil da ein Komma drin ist, was so sicher nicht gewollt war.

Davon mal abgesehen, kannst Du es doch einfach mal ausprobieren.