Nan-Werte aus einem NumPy-Array entfernen

Vaibhav Vaibhav 30 Januar 2023
  1. Nan-Werte mit den Methoden logical_not() und isnan() in NumPy entfernen
  2. Entfernen Sie Nanowerte mit der Methode isfinite() in NumPy
  3. Entfernen Sie Nanowerte mit der Methode math.isnan
  4. Entfernen von Nan-Werten mit der Methode pandas.isnull
Nan-Werte aus einem NumPy-Array entfernen

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]
Vaibhav Vaibhav avatar Vaibhav Vaibhav avatar

Vaibhav is an artificial intelligence and cloud computing stan. He likes to build end-to-end full-stack web and mobile applications. Besides computer science and technology, he loves playing cricket and badminton, going on bike rides, and doodling.