HOWTO · NumPy

Zeile in NumPy löschen

Die Funktion numpy.delete() kann verwendet werden, um eine Zeile aus einem mehrdimensionalen NumPy-Array in Python zu löschen.

Auf dieser Seite

NumPy-Arrays bieten keine Möglichkeit, eine Zeile zu entfernen und dabei ihre Größe direkt zu ändern. Um ein Array ohne ausgewählte Zeilen zu erstellen, verwenden Sie numpy.delete() mit der Zeilenachse oder eine boolesche Maske, um Zeilen zu behalten, die eine Bedingung erfüllen. Array-Indizes beginnen bei 0. Der Index 1 bezeichnet daher die zweite Zeile.

Eine Zeile anhand ihres Index mit numpy.delete() löschen

Übergeben Sie der Funktion numpy.delete() das Array, den Zeilenindex und axis=0. Achse 0 wählt Zeilen aus; bei einem zweidimensionalen Array würde Achse 1 die Spalten auswählen. Das folgende Beispiel entfernt die zweite Zeile:

Der Code und die angezeigten Bezeichnungen oder Ausgaben in diesem Abschnitt bleiben auf Englisch.

import numpy as np

array = np.array([[1, 2, 3],
                  [4, 5, 6],
                  [7, 8, 9]])
without_second = np.delete(array, 1, axis=0)
print(without_second)

Das zurückgegebene Array enthält die erste und die dritte Zeile. numpy.delete() erstellt ein neues Array und lässt array unverändert. Verwenden Sie den Rückgabewert für weitere Berechnungen. Wenn Sie ihn wie oben einer neuen Variablen zuweisen, bleibt das ursprüngliche Array verfügbar.

Mehrere Zeilen anhand ihrer Indizes löschen

Um mehrere bekannte Zeilen in einem Aufruf zu entfernen, übergeben Sie ihre Indizes als Folge. Die Indizes beziehen sich weiterhin auf das ursprüngliche Array. Das Entfernen von Index 1 ändert also nicht die Bedeutung von Index 3 im selben Aufruf. Hier werden die zweite und die vierte Zeile zum Entfernen ausgewählt:

Der Code und die angezeigten Bezeichnungen oder Ausgaben in diesem Abschnitt bleiben auf Englisch.

import numpy as np

array = np.array([[1, 2, 3],
                  [4, 5, 6],
                  [7, 8, 9],
                  [10, 11, 12]])
without_selected = np.delete(array, [1, 3], axis=0)
print(without_selected)

Übrig bleiben die ursprünglichen Zeilen an den Indizes 0 und 2. Wenn sich die zu entfernenden Zeilen anhand ihrer Datenwerte bestimmen lassen, ist eine boolesche Maske oft übersichtlicher, als zunächst ihre Indizes zu sammeln.

Zeilen löschen, die eine Bedingung erfüllen

Mit einer booleschen Maske lässt sich auswählen, welche Zeilen beibehalten werden. Bei einem zweidimensionalen Array wählt array[:, 0] die erste Spalte aus. Der Vergleich mit 5 ergibt einen booleschen Wert pro Zeile. Das folgende Beispiel behält Zeilen bei, deren Wert in der ersten Spalte größer als 5 ist:

Der Code und die angezeigten Bezeichnungen oder Ausgaben in diesem Abschnitt bleiben auf Englisch.

import numpy as np

array = np.array([[1, 2, 3],
                  [4, 5, 6],
                  [7, 8, 9],
                  [10, 11, 12]])
keep = array[:, 0] > 5
filtered = array[keep]
print(filtered)

Hier werden passende Zeilen durch Beibehalten gefiltert, statt sie mit numpy.delete() zu löschen. Um Zeilen zu entfernen, die eine Bedingung erfüllen, kehren Sie die Maske mit ~ um, zum Beispiel mit array[~keep]. Wählen Sie den Vergleich passend zur Spalte und zur Regel in Ihren eigenen Daten.

Achsen, Indizes und das zurückgegebene Array verstehen

Bei einem zweidimensionalen Array steht axis=0 für Zeilen und axis=1 für Spalten. In numpy.delete(array, index, axis=0) ist index eine Position ab 0 entlang der Zeilenachse: 0 ist die erste Zeile, 1 die zweite und so weiter. Wenn Sie axis weglassen, wird das Array vor dem Löschen abgeflacht. Dadurch wird bei einem zweidimensionalen Array keine vollständige Zeile entfernt.

Der Vorgang gibt ein neues Array zurück, statt die Größe der Eingabe zu ändern. Behalten Sie das Ergebnis, indem Sie es einer Variablen zuweisen, oder verwenden Sie es direkt in einem späteren Ausdruck. Ein Index außerhalb der ausgewählten Achse liegt außerhalb des gültigen Bereichs; NumPy meldet dann einen IndexError. Wenn Sie nicht sicher sind, welche Zeilen eine Bedingung auswählt, prüfen Sie die boolesche Maske oder geben Sie die ausgewählten Zeilen aus, bevor Sie das Ergebnis in einer größeren Berechnung verwenden.