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.
>>> 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.
>>> 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.
>>> list(data_frame)
['name', 'population', 'state']
Tuttavia, la performance di questo metodo è lenta.
>>> 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
.
>>> list(data_frame.columns)
['name', 'population', 'state']
Altrimenti, possiamo usare la funzione DataFrame.columns.tolist()
per ottenere la stessa cosa.
>>> data_frame.columns.tolist()
['name', 'population', 'state']
Le prestazioni di entrambi i metodi non sono molto migliori.
>>> 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
.
>>> list(data_frame.columns.values)
['name', 'population', 'state']
Le prestazioni di questo approccio sono da 5 a 6 volte migliori rispetto ai metodi precedenti.
>>> 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.
>>> 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.
Articolo correlato - Pandas DataFrame
- Come cancellare la colonna DataFrame Pandas DataFrame
- Come convertire la colonna DataFrame in data e ora in pandas
- Converti un Float in un Integer in Pandas DataFrame
- Ordina Pandas DataFrame in base ai valori di una colonna
- Ottieni l'aggregato di Pandas Group-By e Sum