Cómo obtener las cabeceras de columna de Pandas DataFrame como una lista
Pandas es un paquete de código abierto para el análisis de datos en Python.
pandas.DataFrame es la estructura de datos primaria de Pandas.
Es una estructura de datos tabular bidimensional con ejes etiquetados (filas y columnas).
Un caso de uso generalizado es obtener una lista de cabeceras de columna de un objeto DataFrame
.
Reutilizaremos el objeto DataFrame
, que definimos a continuación, en todos los demás ejemplos de código de este tutorial.
>>> import pandas
>>> cities = {
... 'name': ['New York', 'Los Angeles', 'Chicago'],
... 'population': [8601186, 4057841, 2679044],
... 'state': ['NY', 'CA', 'IL'],
... }
>>> data_frame = pandas.DataFrame(cities)
Una forma de obtener los nombres de las columnas del DataFrame
es iterar sobre el propio objeto DataFrame
.
El iterador DataFrame
devuelve los nombres de columna en el orden de su definición.
>>> for column in data_frame:
... print(column)
...
name
population
state
Cuando es necesario convertir un iterable en una lista, puedes llamar a la función list
incorporada en Python.
>>> list(data_frame)
['name', 'population', 'state']
Sin embargo, el rendimiento de este método es lento.
>>> from timeit import timeit
>>> timeit(lambda: list(data_frame))
7.818843764999997
También podemos profundizar en un objeto DataFrame
para acceder a sus columnas desde una propiedad DataFrame.columns
.
>>> list(data_frame.columns)
['name', 'population', 'state']
De lo contrario, podemos usar la función DataFrame.columns.tolist()
para conseguir lo mismo.
>>> data_frame.columns.tolist()
['name', 'population', 'state']
El rendimiento de ambos métodos no es mucho mejor.
>>> timeit(lambda: list(data_frame.columns))
7.143133517000024
>>> timeit(lambda: data_frame.columns.tolist())
6.064925153999866
Las cosas cambian mucho cuando se pasa a la propiedad DataFrame.columns.values
.
De manera similar, como con el objeto DataFrame
y la propiedad DataFrame.columns
, podemos usarla para obtener una secuencia de nombres de columnas DataFrame
.
>>> list(data_frame.columns.values)
['name', 'population', 'state']
El rendimiento de este enfoque es de 5 a 6 veces mejor cuando se compara con los métodos anteriores.
>>> timeit(lambda: list(data_frame.columns.values))
1.301724927000123
Aún así, el mejor tiempo de ejecución se puede conseguir si usamos el método incorporado DataFrame.columns.values.tolist()
.
>>> data_frame.columns.values.tolist()
['name', 'population', 'state']
>>> timeit(lambda: data_frame.columns.values.tolist())
0.6860591469999235
Como podemos ver, el rendimiento de esta aproximación es más de diez veces mejor que si hubiéramos iterado directamente sobre el objeto DataFrame
.
La mayoría de los ingenieros tendrán curiosidad por saber las razones de esta discrepancia en el rendimiento.
La respuesta se esconde en el tipo de datos de la propiedad DataFrame.columns.values
.
Es un array NumPy.
NumPy es un paquete Python para computación científica, y los mantenedores lo optimizan altamente para el rendimiento.
Pandas se construye sobre NumPy y proporciona convenientes abstracciones de alto nivel.
Por lo tanto, realizar operaciones directas en estructuras de datos NumPy de nivel inferior será casi siempre más rápido que realizar operaciones similares en estructuras de datos de nivel superior de Pandas.
Artículo relacionado - Pandas DataFrame
- Cómo borrar la columna de Pandas DataFrame
- Cómo convertir la columna del DataFrame a Datetime en Pandas
- Cómo convertir un float en un entero en Pandas DataFrame
- Cómo clasificar Pandas DataFrame por los valores de una columna
- Cómo obtener el agregado de Pandas grupo por y suma