Wie man Pandas DataFrame-Spaltenüberschriften als Liste erhält
Pandas ist ein Open-Source-Paket zur Datenanalyse in Python.
pandas.DataFrame ist die primäre Datenstruktur von Pandas.
Es ist eine zweidimensionale tabellarische Datenstruktur mit beschrifteten Achsen (Zeilen und Spalten).
Ein weit verbreiteter Anwendungsfall ist es, eine Liste von Spaltenüberschriften aus einem DataFrame
Objekt zu erhalten.
Wir werden das DataFrame
Objekt, das wir unten definieren, in allen anderen Code-Beispielen dieses Tutorials wiederverwenden.
>>> import pandas
>>> cities = {
... 'name': ['New York', 'Los Angeles', 'Chicago'],
... 'population': [8601186, 4057841, 2679044],
... 'state': ['NY', 'CA', 'IL'],
... }
>>> data_frame = pandas.DataFrame(cities)
Ein Weg, um an die Spaltennamen von DataFrame
zu gelangen, ist die Iteration über ein DataFrame
Objekt selbst.
Der DataFrame
Iterator gibt die Spaltennamen in der Reihenfolge der Definition zurück.
>>> for column in data_frame:
... print(column)
...
name
population
state
Wenn die Notwendigkeit besteht, eine Iteration in eine Liste zu konvertieren, können Sie Pythons eingebaute list
Funktion darauf anwenden.
>>> list(data_frame)
['name', 'population', 'state']
Allerdings ist die Performance dieser Methode träge.
>>> from timeit import timeit
>>> timeit(lambda: list(data_frame))
7.818843764999997
Wir können auch tiefer in ein DataFrame
-Objekt eindringen, um von einer DataFrame.columns
-Eigenschaft auf seine Spalten zuzugreifen.
>>> list(data_frame.columns)
['name', 'population', 'state']
Andernfalls können wir die DataFrame.columns.tolist()
Funktion benutzen, um das gleiche zu erreichen.
>>> data_frame.columns.tolist()
['name', 'population', 'state']
Die Performance dieser beiden Methoden ist nicht viel besser.
>>> timeit(lambda: list(data_frame.columns))
7.143133517000024
>>> timeit(lambda: data_frame.columns.tolist())
6.064925153999866
Die Dinge ändern sich viel, wenn man noch weiter in die DataFrame.columns.values
-Eigenschaft hineingeht.
Ähnlich wie beim DataFrame
-Objekt und der DataFrame.columns
-Eigenschaft, können wir sie benutzen, um eine Sequenz von DataFrame
-Spaltennamen zu erhalten.
>>> list(data_frame.columns.values)
['name', 'population', 'state']
Die Performance dieses Ansatzes ist 5 bis 6 mal besser als die der vorherigen Methoden.
>>> timeit(lambda: list(data_frame.columns.values))
1.301724927000123
Trotzdem kann die beste Laufzeit erreicht werden, wenn wir die eingebaute DataFrame.columns.values.tolist()
Methode verwenden.
>>> data_frame.columns.values.tolist()
['name', 'population', 'state']
>>> timeit(lambda: data_frame.columns.values.tolist())
0.6860591469999235
Wie wir sehen können, ist die Performance dieses Ansatzes mehr als zehnmal besser, als wenn wir direkt über das DataFrame
-Objekt iterieren würden.
Die meisten Ingenieure werden neugierig auf die Gründe für eine solche Diskrepanz in der Leistung sein.
Die Antwort versteckt sich im Datentyp der DataFrame.columns.values
Eigenschaft.
Es ist ein NumPy Array.
NumPy ist ein Python-Paket für wissenschaftliches Rechnen, und die Maintainer optimieren es in hohem Maße für die Performance.
Pandas ist auf NumPy aufgebaut und bietet bequeme Abstraktionen auf hoher Ebene.
Daher wird die Ausführung direkter Operationen auf NumPy-Datenstrukturen auf niedrigerer Ebene fast immer schneller sein als die Ausführung ähnlicher Operationen auf Pandas-Datenstrukturen auf höherer Ebene.
Verwandter Artikel - Pandas DataFrame
- Pandas DataFrame-Spalte löschen
- Wie man DataFrame-Spalte in Datetime in Pandas konvertiert
- Wie konvertiert man eine Fließkommazahl in eine Ganzzahl in Pandas DataFrame
- Wie man Pandas-DataFrame nach den Werten einer Spalte sortiert
- Wie erhält man das Aggregat der Pandas gruppenweise und sum