1369 Stimmen

Erhalten Sie eine Liste von Pandas DataFrame-Spaltenüberschriften

Ich möchte eine Liste der Spaltenüberschriften aus einem Pandas DataFrame erhalten. Das DataFrame wird vom Benutzer eingegeben, daher werde ich nicht wissen, wie viele Spalten es geben wird oder wie sie genannt werden.

Zum Beispiel, wenn ich ein DataFrame wie dieses gegeben habe:

    y  gdp  cap
0   1    2    5
1   2    3    9
2   8    7    2
3   3    4    7
4   6    7    7
5   4    8    3
6   8    2    8
7   9    9   10
8   6    6    4
9  10   10    7

Ich würde eine Liste wie diese erhalten:

['y', 'gdp', 'cap']

2035voto

Simeon Visser Punkte 115081

Sie können die Werte als Liste erhalten, indem Sie Folgendes tun:

list(my_dataframe.columns.values)

Sie können auch einfach verwenden (wie in Ed Chums Antwort gezeigt):

list(my_dataframe)

530voto

EdChum Punkte 333941

Es gibt eine integrierte Methode, die am performantesten ist:

my_dataframe.columns.values.tolist()

.columns gibt einen Index zurück, .columns.values gibt ein Array zurück und dafür gibt es eine Hilfsfunktion .tolist, um eine Liste zurückzugeben.

Wenn die Leistung für Sie nicht so wichtig ist, definieren Index-Objekte eine Methode .tolist(), die Sie direkt aufrufen können:

my_dataframe.columns.tolist()

Der Leistungsunterschied ist offensichtlich:

%timeit df.columns.tolist()
16.7 µs ± 317 ns pro Schleife (Mittelwert ± Standardabweichung von 7 Durchläufen, 100000 Durchläufe je Schleife)

%timeit df.columns.values.tolist()
1.24 µs ± 12.3 ns pro Schleife (Mittelwert ± Standardabweichung von 7 Durchläufen, 1000000 Durchläufe je Schleife)

Für diejenigen, die das Tippen hassen, können Sie einfach list auf df aufrufen, wie folgt:

list(df)

108voto

tegan Punkte 1997

Ich habe einige schnelle Tests durchgeführt, und vielleicht wenig überraschend ist die integrierte Version, die datenframe.columns.values.tolist() verwendet, am schnellsten:

In [1]:%timeit [Spalte for Spalte in df]
1000 Schleifen, bester von 3: 81,6 µs pro Schleife

In [2]: %timeit df.columns.values.tolist()
10000 Schleifen, bester von 3: 16,1 µs pro Schleife

In [3]: %timeit list(df)
10000 Schleifen, bester von 3: 44,9 µs pro Schleife

In [4]: % timeit list(df.columns.values)
10000 Schleifen, bester von 3: 38,4 µs pro Schleife

(Ich mag immer noch wirklich die list(datensframe), also danke EdChum!)

64voto

cs95 Punkte 325143

Erweitertes Iterable-Unpacking (Python 3.5+): [*df] und Freunde

Verallgemeinerungen des Unpackings (PEP 448) wurden mit Python 3.5 eingeführt. Daher sind die folgenden Operationen alle möglich.

df = pd.DataFrame('x', columns=['A', 'B', 'C'], index=range(5))
df

   A  B  C
0  x  x  x
1  x  x  x
2  x  x  x
3  x  x  x
4  x  x  x

Wenn Sie eine Liste möchten....

[*df]
# ['A', 'B', 'C']

Oder, wenn Sie ein Set möchten,

{*df}
# {'A', 'B', 'C'}

Oder, wenn Sie ein Tupel möchten,

*df,  # Bitte beachten Sie das nachfolgende Komma
# ('A', 'B', 'C')

Oder, wenn Sie das Ergebnis irgendwo speichern möchten,

*cols, = df  # Ein wildes Komma erscheint, noch einmal
cols
# ['A', 'B', 'C']

... wenn Sie der Typ von Person sind, der Kaffee in Tippgeräusche umwandelt, nun, dies wird Ihren Kaffee effizienter verbrauchen ;)

Nachtrag: Wenn die Leistung wichtig ist, sollten Sie die oben genannten Lösungen zugunsten von

df.columns.to_numpy().tolist()
# ['A', 'B', 'C']

Dies ähnelt Ed Chums Antwort, ist aber aktualisiert für v0.24, wo .to_numpy() gegenüber der Verwendung von .values bevorzugt wird. Sehen Sie diese Antwort (von mir) für weitere Informationen.

Visuelle Überprüfung

Weil ich gesehen habe, dass dies in anderen Antworten diskutiert wurde, können Sie Iterable-Unpacking verwenden (kein expliziter Loop erforderlich).

print(*df)
A B C

print(*df, sep='\n')
A
B
C

Kritik an anderen Methoden

Verwenden Sie keine explizite for-Schleife für eine Operation, die in einer einzigen Zeile durchgeführt werden kann (Listenabstraktionen sind in Ordnung).

Weiterhin wird bei Verwendung von sorted(df) die ursprüngliche Reihenfolge nicht beibehalten der Spalten. Dafür sollten Sie stattdessen list(df) verwenden.

Zuletzt sind list(df.columns) und list(df.columns.values) schlechte Vorschläge (Stand der aktuellen Version, v0.24). Sowohl Index (zurückgegeben von df.columns) als auch NumPy-Arrays (zurückgegeben von df.columns.values) definieren die Methode .tolist(), die schneller und idiomatischer ist.

Zu guter Letzt sollte die Verwendung von Listenbildung d.h., list(df), nur als knappe Alternative zu den zuvor genannten Methoden für Python 3.4 oder früher verwendet werden, wo kein erweiterter Unpacking verfügbar ist.

61voto

fixxxer Punkte 14550

Es wird noch einfacher (von Pandas 0.16.0):

df.columns.tolist()

gibt Ihnen die Spaltennamen in einer schönen Liste.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X