Comment obtenir les en-têtes de colonne de Pandas DataFrame sous forme de liste
Pandas est un paquet open-source pour l’analyse de données en Python.
pandas.DataFrame est la principale structure de données de Pandas.
C’est une structure de données tabulaires bidimensionnelles avec des axes étiquetés (lignes et colonnes).
Un cas d’utilisation très répandu est d’obtenir une liste d’en-têtes de colonnes à partir d’un objet DataFrame
.
Nous allons réutiliser l’objet DataFrame
, que nous définissons ci-dessous, dans tous les autres exemples de code de ce tutoriel.
>>> import pandas
>>> cities = {
... 'name': ['New York', 'Los Angeles', 'Chicago'],
... 'population': [8601186, 4057841, 2679044],
... 'state': ['NY', 'CA', 'IL'],
... }
>>> data_frame = pandas.DataFrame(cities)
Une façon de mettre la main sur les noms de colonnes de DataFrame
est d’itérer sur un objet DataFrame
lui-même.
L’itérateur DataFrame
retourne les noms de colonnes dans l’ordre de la définition.
>>> for column in data_frame:
... print(column)
...
name
population
state
Quand il est nécessaire de convertir un itérateur en liste, vous pouvez appeler la fonction list
intégrée de Python.
>>> list(data_frame)
['name', 'population', 'state']
Cependant, la performance de cette méthode est lente.
>>> from timeit import timeit
>>> timeit(lambda: list(data_frame))
7.818843764999997
Nous pouvons aussi aller plus loin dans un objet DataFrame
pour accéder à ses colonnes à partir d’une propriété DataFrame.columns
.
>>> list(data_frame.columns)
['name', 'population', 'state']
Sinon, nous pouvons utiliser la fonction DataFrame.columns.tolist()
pour obtenir la même chose.
>>> data_frame.columns.tolist()
['name', 'population', 'state']
La performance de ces deux méthodes n’est pas bien meilleure.
>>> timeit(lambda: list(data_frame.columns))
7.143133517000024
>>> timeit(lambda: data_frame.columns.tolist())
6.064925153999866
Les choses changent beaucoup en allant encore plus loin dans la propriété DataFrame.columns.values
.
De même, comme avec l’objet DataFrame
et la propriété DataFrame.columns
, nous pouvons l’utiliser pour obtenir une séquence de noms de colonnes DataFrame
.
>>> list(data_frame.columns.values)
['name', 'population', 'state']
Les performances de cette approche sont 5 à 6 fois meilleures que celles des méthodes précédentes.
>>> timeit(lambda: list(data_frame.columns.values))
1.301724927000123
Cependant, le meilleur temps d’exécution peut être obtenu si nous utilisons la méthode intégrée DataFrame.columns.values.tolist()
.
>>> data_frame.columns.values.tolist()
['name', 'population', 'state']
>>> timeit(lambda: data_frame.columns.values.tolist())
0.6860591469999235
Comme nous pouvons le voir, la performance de cette approche est plus de dix fois meilleure que si nous avions itéré directement sur l’objet DataFrame
.
La plupart des ingénieurs seront curieux de connaître les raisons d’une telle différence de performance.
La réponse se cache dans le type de données de la propriété DataFrame.columns.values
.
Il s’agit d’un tableau NumPy.
NumPy est un paquet Python pour le calcul scientifique, et les mainteneurs l’optimisent fortement pour la performance.
Pandas est construit sur NumPy et fournit des abstractions pratiques de haut niveau.
Ainsi, effectuer des opérations directes sur des structures de données NumPy de niveau inférieur sera presque toujours plus rapide que d’effectuer des opérations similaires sur des structures de données Pandas de niveau supérieur.
Article connexe - Pandas DataFrame
- Comment supprimer une colonne de Pandas DataFrame
- Comment convertir la colonne DataFrame en date-heure dans Pandas
- Comment convertir un float en un entier dans Pandas DataFrame
- Comment trier le DataFrame de Pandas par les valeurs d'une colonne
- Comment obtenir l'agrégat des Pandas par groupe et par somme