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?
Numpy isnan() Methode
-
- User
- Beiträge: 512
- Registriert: Mittwoch 13. November 2019, 08:38
Verwende keine Schleifen auf Numpy-Arrays. Wenn man das macht, macht man nahezu immer etwas verkehrt.
Code: Alles auswählen
data = data[~np.isnan(data)]
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?
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?
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).
Dich interessiert ja auch nur die Nan-Werte in der zweiten Spalte:
Code: Alles auswählen
data = data[~np.isnan(data[:, 1])]
- __blackjack__
- User
- Beiträge: 14031
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
Ergänzung: Bei den Bit-Operatoren muss man dann noch auf den Operatorvorrang achten und gegebenenfalls Klammern setzen.
„A life is like a garden. Perfect moments can be had, but not preserved, except in memory. LLAP” — Leonard Nimoy's last tweet.
- __blackjack__
- User
- Beiträge: 14031
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
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.
„A life is like a garden. Perfect moments can be had, but not preserved, except in memory. LLAP” — Leonard Nimoy's last tweet.