Data Science

Effizientes Löschen von Zeilen in Pandas DataFrames

Spread the love

Pandas ist eine leistungsstarke Python-Bibliothek zur Datenmanipulation. Eine häufige Aufgabe ist das Löschen von Zeilen aus einem DataFrame basierend auf Spaltenwerten. Dieser Artikel untersucht effiziente Methoden hierfür.

Inhaltsverzeichnis

Effizientes Zeilenlöschen mit Boolescher Maskierung

Die boolesche Maskierung bietet die prägnanteste und effizienteste Möglichkeit, Zeilen basierend auf den Werten einer Spalte zu entfernen. Sie filtert den DataFrame direkt mit einer booleschen Bedingung.


import pandas as pd

# Beispiel-DataFrame
data = {'Name': ['Alice', 'Bob', 'Charlie', 'David'],
        'Age': [25, 30, 25, 35],
        'City': ['New York', 'London', 'Paris', 'Tokyo']}
df = pd.DataFrame(data)
print("Original DataFrame:n", df)

# Entfernen von Zeilen, wo Age 25 ist
df = df[df['Age'] != 25]  
print("nDataFrame nach dem Entfernen von Zeilen mit Age 25:n", df)

df['Age'] != 25 erzeugt eine boolesche Series. True zeigt Zeilen an, wo ‚Age‘ nicht 25 ist. Die Verwendung davon zum Indexieren von df filtert direkt und behält nur Zeilen, wo die Bedingung True ist. Dies vermeidet den Zwischenschritt des Findens von Indizes und verbessert Geschwindigkeit und Speichereffizienz, besonders bei großen Datensätzen.

Verwendung der .drop-Methode (weniger effizient)

Die .drop-Methode entfernt Zeilen anhand des Indexlabels. Um basierend auf Spaltenwerten zu löschen, müssen zuerst die relevanten Indizes mit boolescher Indexierung identifiziert werden.


import pandas as pd

# Beispiel-DataFrame (wie zuvor)
data = {'Name': ['Alice', 'Bob', 'Charlie', 'David'],
        'Age': [25, 30, 25, 35],
        'City': ['New York', 'London', 'Paris', 'Tokyo']}
df = pd.DataFrame(data)
print("Original DataFrame:n", df)

# Identifizieren der Indizes von Zeilen, wo Age 25 ist
indices_to_drop = df[df['Age'] == 25].index

# Entfernen von Zeilen mit .drop
df = df.drop(indices_to_drop)
print("nDataFrame nach dem Entfernen von Zeilen mit Age 25:n", df)

#Änderung direkt im DataFrame (modifiziert den ursprünglichen DataFrame direkt)
#df.drop(indices_to_drop, inplace=True) 

Dieser Ansatz ist, obwohl klar, weniger effizient als die boolesche Maskierung, insbesondere bei großen DataFrames, aufgrund des zusätzlichen Schritts der Identifizierung und des anschließenden Löschens von Indizes.

Performance-Überlegungen für große Datensätze

Bei kleineren Datensätzen ist der Performance-Unterschied zwischen diesen Methoden möglicherweise vernachlässigbar. Bei großen Datensätzen übertrifft die boolesche Maskierung jedoch die .drop-Methode deutlich. Die boolesche Maskierung arbeitet direkt mit den zugrunde liegenden Daten, während .drop einen neuen DataFrame erstellt, was möglicherweise zu Speicherproblemen und langsameren Verarbeitungszeiten führt.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert