it-swarm.com.de

Rufen Sie eine Liste von Pandas DataFrame-Spaltenüberschriften ab

Ich möchte eine Liste der Spaltenüberschriften von einem Pandas-DataFrame erhalten. Der DataFrame wird von Benutzereingaben stammen, daher weiß ich nicht, wie viele Spalten vorhanden sind oder wie sie genannt werden.

Wenn mir beispielsweise ein DataFrame wie folgt gegeben wird:

>>> my_dataframe
    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 möchte eine Liste wie die folgende erhalten:

>>> header_list
[y, gdp, cap]
711
natsuki_2002

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

list(my_dataframe.columns.values)

Sie können auch einfach verwenden:

list(my_dataframe)
1256
Simeon Visser

Es gibt eine eingebaute Methode, die am leistungsfähigsten ist:

my_dataframe.columns.values.tolist()

.columns gibt ein Index zurück, .columns.values gibt ein array zurück und dieses hat eine Hilfsfunktion, um ein list zurückzugeben.

EDIT

Für diejenigen, die das Tippen hassen, ist dies wahrscheinlich die kürzeste Methode:

list(df)
304
EdChum

Ich habe einige schnelle Tests durchgeführt, und vielleicht überrascht es nicht, dass die integrierte Version mit dataframe.columns.values.tolist() die schnellste ist:

In [1]: %timeit [column for column in df]
1000 loops, best of 3: 81.6 µs per loop

In [2]: %timeit df.columns.values.tolist()
10000 loops, best of 3: 16.1 µs per loop

In [3]: %timeit list(df)
10000 loops, best of 3: 44.9 µs per loop

In [4]: % timeit list(df.columns.values)
10000 loops, best of 3: 38.4 µs per loop

(Ich mag die list(dataframe) trotzdem sehr, also danke EdChum!)

75
tegan

Es wird noch einfacher (durch Pandas 0.16.0): 

df.columns.tolist()

gibt Ihnen die Spaltennamen in einer Liste von Nizza.

39
fixxxer
>>> list(my_dataframe)
['y', 'gdp', 'cap']

Verwenden Sie ein Listenverständnis, um die Spalten eines Datenrahmens im Debugger-Modus aufzulisten:

>>> [c for c in my_dataframe]
['y', 'gdp', 'cap']

Übrigens können Sie eine sortierte Liste einfach mit sorted erhalten:

>>> sorted(my_dataframe)
['cap', 'gdp', 'y']
30
Alexander

Das ist als my_dataframe.columns verfügbar.

22
BrenBarn

Es ist interessant, aber df.columns.values.tolist() ist fast dreimal schneller als df.columns.tolist(), aber ich dachte, dass sie gleich sind:

In [97]: %timeit df.columns.values.tolist()
100000 loops, best of 3: 2.97 µs per loop

In [98]: %timeit df.columns.tolist()
10000 loops, best of 3: 9.67 µs per loop
15

Ein DataFrame folgt der diktiösen Konvention des Iterierens über die „Tasten“ der Objekte.

my_dataframe.keys()

Erstellen Sie eine Liste von Schlüsseln/Spalten - Objektmethode to_list() und Pythonic-Methode

my_dataframe.keys().to_list()
list(my_dataframe.keys())

Grundlegende Iteration bei einem DataFrame gibt Spaltenbezeichnungen zurück

[column for column in my_dataframe]

Konvertieren Sie einen DataFrame nicht in eine Liste, nur um die Spaltenbeschriftungen abzurufen. Hören Sie nicht auf, nach praktischen Code-Beispielen zu suchen.

xlarge = pd.DataFrame(np.arange(100000000).reshape(10000,10000))
list(xlarge) #compute time and memory consumption depend on dataframe size - O(N)
list(xlarge.keys()) #constant time operation - O(1)
11

Im Notizbuch

Für die Erkundung von Daten im IPython-Notebook ist meine bevorzugte Methode die folgende:

sorted(df)

Dadurch wird eine leicht lesbare alphabetisch geordnete Liste erstellt.

In einem Code-Repository

Im Code finde ich das expliziter

df.columns

Weil es anderen sagt, dass sie Ihren Code lesen, was Sie tun.

10
firelynx

Überrascht habe ich das noch nicht gesehen, also lasse ich es einfach hier.

Erweitertes Iterables Entpacken (python3.5 +): [*df] und Freunde

Auspacken von Generalisierungen (PEP 448) wurden mit Python 3.5 eingeführt. Die folgenden Operationen sind also 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 list....

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

Oder, wenn Sie eine set wollen,

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

Oder, wenn Sie eine Tuple wollen,

*df,  # Please note the trailing comma
# ('A', 'B', 'C')

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

*cols, = df  # A wild comma appears, again
cols
# ['A', 'B', 'C']

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

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

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

Dies ähnelt Ed Chums Antwort , wurde jedoch für Version 0.24 aktualisiert, in der .to_numpy() der Verwendung von .values vorgezogen wird. Siehe diese Antwort (von mir) für weitere Informationen.

Sichtprüfung
Da ich dies in anderen Antworten besprochen habe, können Sie iteratives Entpacken verwenden (keine expliziten Schleifen erforderlich).

print(*df)
A B C

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

Kritik anderer Methoden

Verwenden Sie keine explizite for-Schleife für eine Operation, die in einer einzelnen Zeile ausgeführt werden kann (Listenverständnisse sind in Ordnung).

Wenn Sie sorted(df) verwenden, wird die ursprüngliche Reihenfolge der Spalten nicht beibehalten. Verwenden Sie dafür stattdessen list(df).

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

Schließlich sollte die Listifizierung, d. H. list(df), nur als prägnante Alternative zu den oben genannten Methoden verwendet werden.

5
cs95

wie von Simeon Visser geantwortet ... du könntest es tun

list(my_dataframe.columns.values) 

oder 

list(my_dataframe) # for less typing.

Aber ich denke, der schönste Punkt ist:

list(my_dataframe.columns)

Es ist explizit, gleichzeitig nicht unnötig lang.

4
Vivek

Dies gibt uns die Namen von Spalten in einer Liste:

list(my_dataframe.columns)

Eine andere Funktion namens tolist () kann ebenfalls verwendet werden:

my_dataframe.columns.tolist()
4
Harikrishna

Versuchen Sie Folgendes für eine schnelle, ordentliche Sichtprüfung:

for col in df.columns:
    print col
2
Joseph True
n = []
for i in my_dataframe.columns:
    n.append(i)
print n
2
user21988

Ich habe das Gefühl, dass die Frage eine zusätzliche Erklärung verdient.

Wie @fixxxer feststellte, hängt die Antwort von der Pandas-Version ab, die Sie in Ihrem Projekt verwenden Diese erhalten Sie mit dem Befehl pd.__version__.

Wenn Sie aus irgendeinem Grund wie ich (bei debian jessie verwende ich 0.14.1) verwenden und ältere Versionen von Pandas als 0.16.0 verwenden, müssen Sie Folgendes verwenden:

df.keys().tolist(), da noch keine df.columns-Methode implementiert ist.

Der Vorteil dieser Schlüsselmethode ist, dass sie auch in einer neueren Version von Pandas funktioniert und somit universeller ist.

2
StefanK
%%timeit
final_df.columns.values.tolist()
948 ns ± 19.2 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
%%timeit
list(final_df.columns)
14.2 µs ± 79.1 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
%%timeit
list(final_df.columns.values)
1.88 µs ± 11.7 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
%%timeit
final_df.columns.tolist()
12.3 µs ± 27.4 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
%%timeit
list(final_df.head(1).columns)
163 µs ± 20.6 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)
2
rohit singh

Obwohl die Lösung, die oben bereitgestellt wurde, Nizza ist. Ich würde auch erwarten, dass so etwas wie frame.column_names () eine Funktion in Pandas ist, aber da dies nicht der Fall ist, wäre es vielleicht nett, die folgende Syntax zu verwenden. Es erhält irgendwie das Gefühl, dass Sie Pandas richtig einsetzen, indem Sie die Funktion "tolist" aufrufen: frame.columns.tolist () 

frame.columns.tolist() 
0

Diese Lösung listet alle Spalten Ihres Objekts my_dataframe auf:

print(list(my_dataframe))
0
Sunitha G