varias seleccionar nombres filtrar datos data columnas columna cambiar agregar python pandas dataframe

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