nombres - seleccionar columnas pandas python
Obtener la lista de los encabezados de columna pandas DataFrame (17)
Quiero obtener una lista de los encabezados de columna de un DataFrame de pandas. El DataFrame provendrá de la entrada del usuario, así que no sabré cuántas columnas habrá o cómo se llamarán.
Por ejemplo, si me dan un DataFrame como este:
>>> my_dataframe
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 gustaría obtener una lista como la de abajo:
>>> header_list
[y, gdp, cap]
En el cuaderno
Para la exploración de datos en la notebook IPython, mi forma preferida es esta:
sorted(df)
Lo que producirá una lista ordenada alfabéticamente fácil de leer.
En un repositorio de código
En el código me parece más explícito hacer
df.columns
Porque le dice a otros que leen tu código lo que estás haciendo.
Como contestó Simeon Visser ... Podrías hacer
list(my_dataframe.columns.values)
o
list(my_dataframe) # for less typing.
Pero creo que la mayoría del punto dulce es:
list(my_dataframe.columns)
Es explícito, al mismo tiempo no innecesariamente largo.
Es interesante, pero df.columns.values.tolist()
es casi 3 veces más rápido que df.columns.tolist()
pero pensé que son lo mismo:
In [97]: %timeit df.columns.values.tolist()
100000 loops, best of 3: 2.97 µs per loop
In [98]: %timeit df.columns.tolist()
10000 loops, best of 3: 9.67 µs per loop
Esta solución enumera todas las columnas de su objeto my_dataframe:
print(list(my_dataframe))
Esto nos da los nombres de las columnas en una lista:
list(my_dataframe.columns)
Otra función llamada tolist () se puede usar también:
my_dataframe.columns.tolist()
Hay un método incorporado que es el más eficaz:
my_dataframe.columns.values.tolist()
.columns
devuelve un Index
, .columns.values
devuelve una array
y esto tiene una función auxiliar para devolver una list
.
EDITAR
Para aquellos que odian escribir, este es probablemente el método más corto:
list(df)
Hice algunas pruebas rápidas, y tal vez no sea sorprendente que la versión dataframe.columns.values.tolist()
usa 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 la list(dataframe)
, ¡gracias EdChum!)
Para una revisión visual rápida y ordenada, prueba esto:
for col in df.columns:
print col
Puedes obtener los valores como una lista haciendo:
list(my_dataframe.columns.values)
También puedes simplemente usar:
list(my_dataframe)
Se vuelve aún más simple (por pandas 0.16.0):
df.columns.tolist()
le dará los nombres de columna en una buena lista.
Siento que la pregunta merece una explicación adicional.
Como señaló @fixxxer, la respuesta depende de la versión de pandas que estés usando en tu proyecto. Que se puede obtener con el comando pd.__version__
.
Si por alguna razón eres como yo (en Debian jessie yo uso 0.14.1) usando una versión más antigua de pandas que 0.16.0, entonces necesitas usar:
df.keys().tolist()
porque todavía no hay df.columns
método df.columns
implementado.
La ventaja de este método de claves es que funciona incluso en una versión más nueva de pandas, por lo que es más universal.
Un DataFrame sigue la convención de iteración de las "claves" de los objetos.
my_dataframe.keys()
Cree una lista de claves / columnas: método de objeto to_list()
y forma pitónica
my_dataframe.keys().to_list()
list(my_dataframe.keys())
pandas.pydata.org/pandas-docs/stable/basics.html#iteration en un DataFrame devuelve etiquetas de columna
[column for column in my_dataframe]
No convierta un DataFrame en una lista, solo para obtener las etiquetas de columna. No deje de pensar mientras busca ejemplos de código convenientes.
xlarge = pd.DataFrame(np.arange(100000000).reshape(10000,10000))
list(xlarge) #compute time and memory consumption depend on dataframe size - O(N)
list(xlarge.keys()) #constant time operation - O(1)
puede usar atributos de índice
df = pd.DataFrame({''col1'' : np.random.randn(3), ''col2'' : np.random.randn(3)},
index=[''a'', ''b'', ''c''])
my_dataframe.columns
disponible como my_dataframe.columns
.
>>> list(my_dataframe)
[''y'', ''gdp'', ''cap'']
Para enumerar las columnas de un marco de datos en el modo depurador, use una lista de comprensión:
>>> [c for c in my_dataframe]
[''y'', ''gdp'', ''cap'']
Por cierto, puede obtener una lista ordenada simplemente usando sorted
:
>>> sorted(my_dataframe)
[''cap'', ''gdp'', ''y'']
list(a_dataframe)
¡Esto debería hacerlo!
n = []
for i in my_dataframe.columns:
n.append(i)
print n