Kurs
PySpark ist besonders hilfreich bei großen Datensätzen, da es effiziente Methoden zur Bereinigung bereitstellt. In diesem Artikel konzentrieren wir uns auf eine häufige Aufgabe: wie man Spalten entfernt — mithilfe der PySpark-Methoden .drop() und .select().
Wenn du mehr über PySpark erfahren möchtest, wirf einen Blick in diesen Kurs: Introduction to PySpark.
Warum Spalten in PySpark-DataFrames entfernen?
Das Entfernen von Spalten ist in der Datenvorverarbeitung aus mehreren Gründen üblich. Das Streichen unnötiger oder irrelevanter Spalten kann die zu verarbeitende Datenmenge deutlich reduzieren. So wird der Datensatz schlanker, leichter zu analysieren und die Performance deiner PySpark-Jobs kann steigen.
Außerdem umfasst die Feature-Auswahl für Machine-Learning-Modelle oft das Entfernen von Spalten, die nicht zur Modellgenauigkeit beitragen oder Rauschen einbringen. Dieser Schritt führt häufig zu effizienteren und treffsichereren Modellen.
Schließlich kann das Entfernen von Spalten auch eine Strategie zur Verbesserung der Datenqualität sein. Enthält eine Spalte einen hohen Anteil fehlender Werte oder fehlerhafter Daten, ist es oft am sinnvollsten, sie zu entfernen.
So entfernst du eine einzelne Spalte aus einem PySpark-DataFrame
Angenommen, wir haben ein DataFrame df mit fünf Spalten: player_name, player_position, team, minutes_played und score. Die Spalte minutes_played enthält viele fehlende Werte, daher möchten wir sie entfernen.
In PySpark können wir eine einzelne Spalte mit der Methode .drop() aus einem DataFrame entfernen.
Die Syntax lautet df.drop("column_name"), wobei:
dfdas DataFrame ist, aus dem die Spalte entfernt werden sollcolumn_nameder Name der zu entfernenden Spalte ist.
Die Methode df.drop() gibt ein neues DataFrame zurück, in dem die angegebenen Spalten fehlen.
So entfernst du eine Spalte:
df_dropped = df.drop("minutes_played")
So entfernst du mehrere Spalten aus einem PySpark-DataFrame
Stell dir vor, wir wollen unser DataFrame df analysieren, aber weder Team noch Spielerposition berücksichtigen — also sollen beide Spalten weg. Dafür gibt es mehrere Ansätze, die wir uns ansehen.
Um mehrere Spalten zu entfernen, können wir der Methode .drop() eine Liste von Spaltennamen übergeben. Das geht auf zwei Arten:
# Option 1: Namen als Liste übergeben
df_dropped = df.drop(["team", "player_position"])
# Option 2: Namen als separate Argumente übergeben
df_dropped = df.drop("team", "player_position")
Alternativ können wir mehrere .drop()-Aufrufe verketten. Das funktioniert zwar, gilt aber nicht als besonders effizient oder elegant. Jeder Aufruf erzeugt ein neues DataFrame, was gerade bei großen Datensätzen zusätzlichen Overhead verursacht.
df_dropped = df.drop("team").drop("player_position")
Spalten bedingt entfernen
Statt explizit anzugeben, welche Spalten entfernt werden sollen, können wir den Ansatz umkehren und nur die Spalten auswählen, die eine Bedingung erfüllen. So enthält das zurückgegebene DataFrame die unerwünschten Spalten nicht mehr.
Mit .select()
Wir können die Methode .select() in PySpark zusammen mit einer List Comprehension verwenden, um eine oder mehrere Spalten anhand bestimmter Kriterien auszuwählen und damit andere effektiv zu entfernen. Der Ansatz ist flexibel — von einfachen bis hin zu komplexen Bedingungen.
Die Methode folgt der Syntax df.select([col for col in df.columns if condition]), wobei:
dfdas DataFrame ist, mit dem du arbeitest.conditiondas Kriterium ist, nach dem die zu behaltenden Spalten gefiltert werden.
Arbeiten wir wieder mit unserem DataFrame df und wählen alle Spalten außer der Spalte team aus:
df_sel = df.select([col for col in df.columns if col != "team"])
Komplexe Bedingungen mit .selectExpr()
Wenn du dich mit SQL wohlfühlst und komplexere Bedingungen bei der Spaltenauswahl brauchst, bietet PySparks .selectExpr() eine starke Lösung. Damit kannst du SQL-ähnliche Ausdrücke direkt in deinem PySpark-Code nutzen, um Spalten auszuwählen und zu manipulieren.
Zum Beispiel:
# Bestimmte Spalten auswählen und eine neue Spalte 'FullMatch' erstellen
df_sel = df.selectExpr("player_name", "player_position", "minutes_played >= 60 as FullMatch")
Hier schließen wir nicht nur eine Spalte aus. Wir:
- Wählen die Spalten
player_nameundplayer_positionaus. - Erstellen eine neue Spalte
FullMatch, die angibt, ob ein Spieler ein vollständiges Spiel absolviert hat (60 Minuten oder mehr).
Diese Flexibilität macht .selectExpr() besonders wertvoll, wenn einfache List Comprehensions nicht ausreichen.
Best Practices
Wenn wir Spalten aus einem DataFrame entfernen, sollten wir einige Best Practices befolgen, um Datenintegrität, Lesbarkeit und Effizienz sicherzustellen.
1. Erstelle ein Backup: Bevor du dein DataFrame änderst, insbesondere beim Entfernen von Spalten, ist es sinnvoll, eine Sicherungskopie anzulegen. So kannst du bei Bedarf auf die Originaldaten zurückgreifen.
df_backup = df.persist() # DataFrame cachen, um spätere Neuberechnungen zu vermeiden
2. Drop mit inplace=False (Standard): Standardmäßig gibt .drop() ein neues DataFrame zurück, ohne das Original zu verändern. Das ist in der Regel sicherer. Wenn du ganz sicher bist, dass du das Original ändern willst, kannst du inplace=True verwenden — aber mit Vorsicht.
df_dropped = df.drop("column_to_drop", inplace=False) # Standardverhalten
3. Entscheidungen dokumentieren: Wenn du im Team arbeitest oder deinen Code später erneut brauchst, helfen Kommentare, die begründen, warum bestimmte Spalten entfernt wurden. Das bietet dir und anderen wertvollen Kontext.
4. Umbenennen in Erwägung ziehen: Statt Spalten zu entfernen, prüfe, ob ein Umbenennen sinnvoller ist — vor allem, wenn die Information später nützlich sein könnte. PySpark stellt dafür die Methode .withColumnRenamed() bereit.
Fazit
In diesem Tutorial hast du gelernt, wie du einzelne und mehrere Spalten mit den Methoden .drop() und .select() entfernst. Außerdem haben wir Alternativen vorgestellt, um bei Bedarf SQL-Ausdrücke für komplexere Auswahltechniken zu nutzen.
Wenn du deine Kompetenzen ausbauen und die leistungsfähigen Techniken von PySpark nutzen willst, schau dir diese Kurse und Materialien an:
FAQs
Wie entferne ich Spalten per Regex in PySpark?
Um Spalten mithilfe eines Regex-Musters in PySpark zu entfernen, kannst du die Spaltennamen mit einer List Comprehension und dem Modul re (für reguläre Ausdrücke) filtern und die gefilterte Liste dann an die Methode .drop() übergeben.
Wie entferne ich Spalten mit demselben Namen in PySpark?
PySpark erlaubt keine doppelten Spaltennamen innerhalb eines DataFrames. Wenn deine Datenquelle doppelte Namen hat, tritt beim Erstellen des DataFrames in der Regel ein Fehler auf. Am besten behebst du doppelte Namen bereits an der Quelle oder beim Erstellen des DataFrames.
Wie entferne ich Spalten mit nur Null-Werten in PySpark?
Um Spalten zu entfernen, die nur Null-Werte enthalten, können wir in PySpark zunächst die Anzahl der Nulls pro Spalte mit count(when(col(c).isNull(), c)) berechnen. Anschließend identifizieren wir Spalten, bei denen die Anzahl der Nulls der gesamten Zeilenzahl des DataFrames entspricht. Diese Spalten entfernen wir schließlich mit der Methode .drop().
Wie entferne ich Spalten in PySpark bedingt?
Verwende df.select([col for col in df.columns if condition]).



