Come ottenere le intestazioni delle colonne DataFrame Pandas come lista

Come ottenere le intestazioni delle colonne DataFrame Pandas come lista

Pandas è un pacchetto open-source per l’analisi dei dati in Python.
pandas.DataFrame è la struttura dati primaria dei pandas.
È una struttura dati tabulare bidimensionale con assi etichettati (righe e colonne).

Un caso d’uso diffuso è quello di ottenere una lista di intestazioni di colonna da un oggetto DataFrame.

Riutilizzeremo l’oggetto DataFrame, che definiamo qui sotto, in tutti gli altri esempi di codice di questo tutorial.

Python
 pythonCopy>>> import pandas
>>> cities = {
...   'name': ['New York', 'Los Angeles', 'Chicago'],
...   'population': [8601186, 4057841, 2679044],
...   'state': ['NY', 'CA', 'IL'],
... }
>>> data_frame = pandas.DataFrame(cities)

Un modo per ottenere i nomi delle colonne di DataFrame è quello di iterare su un oggetto DataFrame stesso.
L’iteratore DataFrame restituisce i nomi delle colonne nell’ordine di definizione.

Python
 pythonCopy>>> for column in data_frame:
...   print(column)
...
name
population
state

Quando c’è la necessità di convertire un iterabile in una lista, si può chiamare la funzione list integrata di Python su di esso.

Python
 pythonCopy>>> list(data_frame)
['name', 'population', 'state']

Tuttavia, la performance di questo metodo è lenta.

Python
 pythonCopy>>> from timeit import timeit
>>> timeit(lambda: list(data_frame))
7.818843764999997

Si può anche passare più in profondità in un oggetto DataFrame per accedere alle sue colonne da una proprietà DataFrame.columns.

Python
 pythonCopy>>> list(data_frame.columns)
['name', 'population', 'state']

Altrimenti, possiamo usare la funzione DataFrame.columns.tolist() per ottenere la stessa cosa.

Python
 pythonCopy>>> data_frame.columns.tolist()
['name', 'population', 'state']

Le prestazioni di entrambi i metodi non sono molto migliori.

Python
 pythonCopy>>> timeit(lambda: list(data_frame.columns))
7.143133517000024
>>> timeit(lambda: data_frame.columns.tolist())
6.064925153999866

Le cose cambiano molto quando si passa ancora di più alla proprietà DataFrame.columns.values.
Allo stesso modo, come per l’oggetto DataFrame e la proprietà DataFrame.columns, possiamo usarlo per ottenere una sequenza di nomi di colonne DataFrame.

Python
 pythonCopy>>> list(data_frame.columns.values)
['name', 'population', 'state']

Le prestazioni di questo approccio sono da 5 a 6 volte migliori rispetto ai metodi precedenti.

Python
 pythonCopy>>> timeit(lambda: list(data_frame.columns.values))
1.301724927000123

Tuttavia, il miglior tempo di esecuzione può essere raggiunto se usiamo il metodo DataFrame.columns.values.tolist() integrato.

Python
 pythonCopy>>> data_frame.columns.values.tolist()
['name', 'population', 'state']
>>> timeit(lambda: data_frame.columns.values.tolist())
0.6860591469999235

Come possiamo vedere, le prestazioni di questo approccio sono più di dieci volte migliori che se avessimo iterato direttamente sull’oggetto DataFrame.
La maggior parte degli ingegneri saranno curiosi di sapere le ragioni di una tale discrepanza nelle prestazioni.

La risposta si nasconde nel tipo di dati della proprietà DataFrame.columns.values.
È un array NumPy.
NumPy è un pacchetto Python per l’informatica scientifica, e i manutentori lo ottimizzano altamente per le prestazioni.

Pandas è costruito sopra NumPy e fornisce comode astrazioni di alto livello.
In questo modo, l’esecuzione di operazioni dirette su strutture dati NumPy di livello inferiore sarà quasi sempre più rapida rispetto all’esecuzione di operazioni simili su strutture dati di livello superiore di Pandas.

Ti piacciono i nostri tutorial? Iscriviti a DelftStack su YouTube per aiutarci a creare altre guide video di alta qualità. Iscriviti

Articolo correlato - Pandas DataFrame

Articolo correlato - Pandas DataFrame Column