HOWTO · Pandas

Mehrere Spalten in einem Pandas-DataFrame auswählen

Erfahre, wie du mehrere Spalten eines Pandas-DataFrames mit eckigen Klammern, `.iloc` für Positionsauswahl und `.loc` für die Auswahl nach Labels auswählst.

Auf dieser Seite

Um mehrere Spalten eines Pandas-DataFrames anhand ihrer Namen auszuwählen, übergib eine Liste der Spalten-Labels in eckigen Klammern, zum Beispiel df[["Name", "Salary"]]. Verwende .iloc, wenn du die Positionen der Spalten kennst, und .loc, wenn du Zeilen und Spalten anhand ihrer Labels auswählen möchtest.

Auswahl mit der Getitem-Syntax

Wenn die Spaltennamen bekannt sind, ist die Auswahl mit eckigen Klammern der direkte Weg. Die äußeren Klammern greifen auf den DataFrame zu; die innere Liste enthält die Labels. In diesem Abschnitt geht es um die Auswahl über __getitem__. Pandas gibt die angeforderten Spalten in der Reihenfolge zurück, in der sie in der Liste stehen – unabhängig von ihrer Reihenfolge im ursprünglichen DataFrame.

Das folgende Beispiel verwendet denselben kleinen DataFrame, um die Auswahl nach Namen, nach Spaltenposition und nach Labels zu vergleichen. Jedes Ergebnis enthält alle Zeilen und die ausgewählten Spalten in der angeforderten Reihenfolge.

import pandas as pd

df = pd.DataFrame({
    "Name": ["Alice", "Bob", "Charlie", "David"],
    "Age": [24, 30, 22, 35],
    "City": ["New York", "Los Angeles", "Chicago", "Houston"],
    "Salary": [70000, 80000, 65000, 90000],
})

by_name = df[["Name", "Salary"]]
by_position = df.iloc[:, [0, 3]]
by_label = df.loc[:, ["City", "Age"]]

print("By name:")
print(by_name.to_dict("records"))
print("\nBy position:")
print(by_position.to_dict("records"))
print("\nBy label:")
print(by_label.to_dict("records"))
By name:
[{'Name': 'Alice', 'Salary': 70000}, {'Name': 'Bob', 'Salary': 80000}, {'Name': 'Charlie', 'Salary': 65000}, {'Name': 'David', 'Salary': 90000}]

By position:
[{'Name': 'Alice', 'Salary': 70000}, {'Name': 'Bob', 'Salary': 80000}, {'Name': 'Charlie', 'Salary': 65000}, {'Name': 'David', 'Salary': 90000}]

By label:
[{'City': 'New York', 'Age': 24}, {'City': 'Los Angeles', 'Age': 30}, {'City': 'Chicago', 'Age': 22}, {'City': 'Houston', 'Age': 35}]

Der Zugriff mit eckigen Klammern ruft bei einem DataFrame die Operation __getitem__ auf. Üblicherweise verwendest du die gut lesbare Schreibweise mit Klammern, statt diese spezielle Methode direkt aufzurufen.

Spalten anhand ihrer Position mit .iloc auswählen

.iloc ist Pandas’ Indexer für ganzzahlige Positionen. In df.iloc[:, [0, 3]] wählt der Doppelpunkt vor dem Komma alle Zeilen aus; [0, 3] wählt die erste und vierte Spalte. Die Zählung beginnt bei null. Ändert sich also die Spaltenreihenfolge im DataFrame, können dieselben Zahlen andere Daten auswählen. Verwende .iloc, wenn die Position entscheidend ist oder keine Labels verfügbar sind.

Spalten anhand ihrer Labels mit .loc auswählen

.loc ist der Indexer für Labels. In df.loc[:, ["City", "Age"]] steht : für die Zeilenauswahl und die Liste für die Spalten-Labels. Die angeforderte Reihenfolge bleibt erhalten: zuerst City, dann Age. Du kannst außerdem eine Zeilenbedingung mit einer Spaltenliste kombinieren, etwa mit df.loc[df["Age"] > 25, ["Name", "City"]]. So bleiben nur passende Zeilen erhalten und es werden nur die genannten Spalten zurückgegeben. Verwende .loc, wenn die Auswahl von Labels abhängt oder du Zeilen und Spalten gemeinsam auswählen möchtest.

Fazit

Verwende df[["a", "b"]] für mehrere Spalten mit bekannten Namen, .iloc für ganzzahlige Positionen und .loc für Labels, optional zusammen mit einer Zeilenauswahl. Wähle nach Labels aus, wenn die Spaltennamen ausdrücken, welche Daten du brauchst; verwende Positionen, wenn ihre Reihenfolge maßgeblich ist.

FAQ

Wie wähle ich Spalten anhand ihres Namens aus? Übergib eine Liste der Labels in den eckigen Klammern des DataFrames, zum Beispiel df[["column1", "column2"]].

Was ist der Unterschied zwischen .iloc und .loc? .iloc wählt anhand ganzzahliger, bei null beginnender Positionen aus; .loc verwendet Labels. Beide nehmen eine Zeilen- und eine Spaltenauswahl entgegen, die durch ein Komma getrennt sind.

Kann ich Zeilen und Spalten gleichzeitig auswählen? Ja. Setze bei .loc vor dem Komma ein Zeilen-Label oder eine Bedingung und danach die gewünschten Spalten-Labels, zum Beispiel df.loc[df["Age"] > 25, ["Name", "City"]].

Welche Schreibweise sollte ich verwenden? Nutze eckige Klammern mit einer Liste, wenn du die Spaltennamen kennst, .iloc bei bekannten ganzzahligen Positionen und .loc, wenn du anhand von Labels auswählen und gegebenenfalls gleichzeitig Zeilen filtern möchtest.

Was mache ich, wenn ich viele Spalten brauche? Schreib die gewünschten Namen in eine Liste. Wenn die Spalten einen zusammenhängenden Bereich bilden, kannst du mit .iloc einen Slice verwenden. Beachte, dass ein .iloc-Slice an der Endposition endet, diese aber nicht einschließt. Für nicht zusammenhängende Spalten gib eine Liste von Positionen oder Labels an.