Obtenga una lista de los encabezados de columna de Pandas DataFrame

Resuelto natsuki_2002 asked hace 11 años • 25 respuestas

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']
natsuki_2002 avatar Oct 21 '13 04:10 natsuki_2002
Aceptado

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)
Simeon Visser avatar Oct 20 '2013 21:10 Simeon Visser

Existe un método integrado que es el de mayor rendimiento:

my_dataframe.columns.values.tolist()

.columnsdevuelve un Index, .columns.valuesdevuelve una matriz y esto tiene una función auxiliar .tolistpara devolver una lista.

Si el rendimiento no es tan importante para usted, Indexlos 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 lista df, así:

list(df)
EdChum avatar Oct 20 '2013 22:10 EdChum

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 !)

tegan avatar Dec 01 '2014 20:12 tegan