Obtenga una lista de los encabezados de columna de Pandas DataFrame
Quiero obtener una lista de los encabezados de columna de un Pandas DataFrame. El DataFrame provendrá de la entrada del usuario, por lo que no sabré cuántas columnas habrá ni cómo se llamarán.
Por ejemplo, si me dan un DataFrame como este:
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
Me saldría una lista como esta:
['y', 'gdp', 'cap']
Puede obtener los valores como una lista haciendo:
list(my_dataframe.columns.values)
También puedes usar simplemente (como se muestra en la respuesta de Ed Chum ):
list(my_dataframe)
Existe un método integrado que es el de mayor rendimiento:
my_dataframe.columns.values.tolist()
.columns
devuelve un Index
, .columns.values
devuelve una matriz y esto tiene una función auxiliar .tolist
para devolver una lista.
Si el rendimiento no es tan importante para usted, Index
los objetos definen un .tolist()
método al que puede llamar directamente:
my_dataframe.columns.tolist()
La diferencia de rendimiento es obvia:
%timeit df.columns.tolist()
16.7 µs ± 317 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
%timeit df.columns.values.tolist()
1.24 µs ± 12.3 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
Para aquellos que odian escribir, pueden simplemente llamar list
a df
, así:
list(df)
Hice algunas pruebas rápidas y quizás, como era de esperar, la versión incorporada dataframe.columns.values.tolist()
sea la más rápida:
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
(Aunque todavía me gusta mucho list(dataframe)
, ¡así que gracias EdChum !)