Nan-Werte aus einem NumPy-Array entfernen
-
Nan-Werte mit den Methoden
logical_not()
undisnan()
in NumPy entfernen -
Entfernen Sie Nanowerte mit der Methode
isfinite()
in NumPy -
Entfernen Sie Nanowerte mit der Methode
math.isnan
-
Entfernen von Nan-Werten mit der Methode
pandas.isnull
In diesem Artikel werden einige integrierte NumPy-Funktionen erläutert, mit denen Sie nan
-Werte löschen können.
Nan-Werte mit den Methoden logical_not()
und isnan()
in NumPy entfernen
logical_not()
wird verwendet, um logisches NOT
auf Elemente eines Arrays anzuwenden. isnan()
ist eine boolesche Funktion, die prüft, ob ein Element nan
ist oder nicht.
Mit der Funktion isnan()
können wir ein boolesches Array erstellen, das für alle Nicht-Nan-Werte False
und für alle nan
-Werte True
enthält. Als nächstes können wir mit der Funktion logical_not()
True
in False
konvertieren und umgekehrt.
Schließlich können wir mithilfe der booleschen Indizierung alle Nicht-Nan-Werte aus dem ursprünglichen NumPy-Array filtern. Alle Indizes mit dem Wert True
werden zum Filtern des NumPy-Arrays verwendet.
Weitere Informationen zu diesen Funktionen finden Sie in der offizielle Dokumentation bzw. hier.
Informationen zur Lösung finden Sie im folgenden Codeausschnitt.
import numpy as np
myArray = np.array([1, 2, 3, np.nan, np.nan, 4, 5, 6, np.nan, 7, 8, 9, np.nan])
output1 = myArray[np.logical_not(np.isnan(myArray))] # Line 1
output2 = myArray[~np.isnan(myArray)] # Line 2
print(myArray)
print(output1)
print(output2)
Ausgabe:
[ 1. 2. 3. nan nan 4. 5. 6. nan 7. 8. 9. nan]
[1. 2. 3. 4. 5. 6. 7. 8. 9.]
[1. 2. 3. 4. 5. 6. 7. 8. 9.]
Line 2
ist eine vereinfachte Version von Line 1
.
Entfernen Sie Nanowerte mit der Methode isfinite()
in NumPy
Wie der Name schon sagt, ist die Funktion isfinite()
eine boolesche Funktion, die prüft, ob ein Element endlich ist oder nicht. Es kann auch nach endlichen Werten in einem Array suchen und ein boolesches Array für dasselbe zurückgeben. Das boolesche Array speichert False
für alle nan
-Werte und True
für alle endlichen Werte.
Wir werden diese Funktion verwenden, um ein boolesches Array für das Zielarray abzurufen. Mit der booleschen Indizierung filtern wir alle endlichen Werte. Wie oben erwähnt, werden wieder Indizes mit True
-Werten verwendet, um das Array zu filtern.
Hier ist der Beispielcode.
import numpy as np
myArray1 = np.array([1, 2, 3, np.nan, np.nan, 4, 5, 6, np.nan, 7, 8, 9, np.nan])
myArray2 = np.array([np.nan, np.nan, np.nan, np.nan, np.nan, np.nan])
myArray3 = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
output1 = myArray1[np.isfinite(myArray1)]
output2 = myArray2[np.isfinite(myArray2)]
output3 = myArray3[np.isfinite(myArray3)]
print(myArray1)
print(myArray2)
print(myArray3)
print(output1)
print(output2)
print(output3)
Ausgabe:
[ 1. 2. 3. nan nan 4. 5. 6. nan 7. 8. 9. nan]
[nan nan nan nan nan nan]
[ 1 2 3 4 5 6 7 8 9 10]
[1. 2. 3. 4. 5. 6. 7. 8. 9.]
[]
[ 1 2 3 4 5 6 7 8 9 10]
Weitere Informationen zu dieser Funktion finden Sie in der offizielle Dokumentation.
Entfernen Sie Nanowerte mit der Methode math.isnan
Abgesehen von diesen beiden NumPy-Lösungen gibt es zwei weitere Möglichkeiten, um nan
-Werte zu entfernen. Diese beiden Möglichkeiten umfassen die Funktion isnan()
aus der Bibliothek math
und die Funktion isnull
aus der Bibliothek pandas
. Beide Funktionen prüfen, ob ein Element nan
ist oder nicht, und geben ein boolesches Ergebnis zurück.
Hier ist die Lösung mit der Methode isnan()
.
import numpy as np
import math
myArray1 = np.array([1, 2, 3, np.nan, np.nan, 4, 5, 6, np.nan, 7, 8, 9, np.nan])
myArray2 = np.array([np.nan, np.nan, np.nan, np.nan, np.nan, np.nan])
myArray3 = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
booleanArray1 = [not math.isnan(number) for number in myArray1]
booleanArray2 = [not math.isnan(number) for number in myArray2]
booleanArray3 = [not math.isnan(number) for number in myArray3]
print(myArray1)
print(myArray2)
print(myArray3)
print(myArray1[booleanArray1])
print(myArray2[booleanArray2])
print(myArray3[booleanArray3])
Ausgabe:
[ 1. 2. 3. nan nan 4. 5. 6. nan 7. 8. 9. nan]
[nan nan nan nan nan nan]
[ 1 2 3 4 5 6 7 8 9 10]
[1. 2. 3. 4. 5. 6. 7. 8. 9.]
[]
[ 1 2 3 4 5 6 7 8 9 10]
Entfernen von Nan-Werten mit der Methode pandas.isnull
Nachfolgend finden Sie die Lösung mit der Methode isnull()
von pandas
.
import numpy as np
import pandas as pd
myArray1 = np.array([1, 2, 3, np.nan, np.nan, 4, 5, 6, np.nan, 7, 8, 9, np.nan])
myArray2 = np.array([np.nan, np.nan, np.nan, np.nan, np.nan, np.nan])
myArray3 = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
booleanArray1 = [not pd.isnull(number) for number in myArray1]
booleanArray2 = [not pd.isnull(number) for number in myArray2]
booleanArray3 = [not pd.isnull(number) for number in myArray3]
print(myArray1)
print(myArray2)
print(myArray3)
print(myArray1[booleanArray1])
print(myArray2[booleanArray2])
print(myArray3[booleanArray3])
print(myArray1[~pd.isnull(myArray1)]) # Line 1
print(myArray2[~pd.isnull(myArray2)]) # Line 2
print(myArray3[~pd.isnull(myArray3)]) # Line 3
Ausgabe:
[ 1. 2. 3. nan nan 4. 5. 6. nan 7. 8. 9. nan]
[nan nan nan nan nan nan]
[ 1 2 3 4 5 6 7 8 9 10]
[1. 2. 3. 4. 5. 6. 7. 8. 9.]
[]
[ 1 2 3 4 5 6 7 8 9 10]
[1. 2. 3. 4. 5. 6. 7. 8. 9.]
[]
[ 1 2 3 4 5 6 7 8 9 10]