Ordenamiento de columnas con Pandas
En este artículo veremos las diferentes formas de ordenamiento de columnas de un DataFrame en Pandas para mejorar la legibilidad de nuestras tablas y facilitar operaciones.
Ordenar columnas en un DataFrame es útil al preparar datos para informes, presentaciones o exportación, donde un orden lógico o consistente mejora la legibilidad. También facilita el trabajo cuando se comparan múltiples DataFrames o se automatizan procesos, ya que contar con columnas ordenadas alfabéticamente o por prioridad ayuda a evitar errores y mejora la comprensión. Finalmente, colocar ciertas columnas clave al inicio (como identificadores) puede acelerar la revisión y análisis durante la exploración de datos.
Para los ejemplos ejemplos de este artículo utilizaremos un archivo CSV que contiene las columnas nombre, apellido, fecha_nacimiento y puntaje.
Primero cargaremos este archivo y lo convertiremos en DataFrames para poder ordenarlo.
import pandas as pd
df = pd.read_csv("datos_personas.csv")
Ordenar columnas manualmente
Para ordenar manualmente las columnas de un DataFrame todo lo que debemos hacer es pasar una lista con los nombres de las columnas en el orden que se quiere que aparezcan. Es importante tener en cuenta que cualquier columna del DataFrame no agregada a la lista no será parte del resultado. La salida será un DataFrame que contiene las columnas en el orden especificado.
columnas = ["nombre", "apellido", "fecha_nacimiento", "puntaje"]
df_ordenado = df[columnas]
puntaje nombre apellido fecha_nacimiento
0 65.14 Daniel West 1962-11-09
1 21.23 Jason Campbell 1968-11-19
2 82.56 Karen Sutton 1999-08-26
3 56.97 Robert Sims 1965-08-15
4 73.61 Omar Taylor 1975-01-27
Ordenar columnas alfabéticamente
Para ordenar las columnas de un DataFrame alfabéticamente se utiliza la función sorted
aplicado a la lista de columnas obtenidas con el atributo columns
del DataFrame.
df_ordenado = df[sorted(df.columns)]
En el ejemplo anterior se obtiene la lista de columnas con el atributo columns
del DataFrame df
, se los ordena con la función sorted y esa lista ordenada es pasada al DataFrame.
apellido fecha_nacimiento nombre puntaje
0 West 1962-11-09 Daniel 65.14
1 Campbell 1968-11-19 Jason 21.23
2 Sutton 1999-08-26 Karen 82.56
3 Sims 1965-08-15 Robert 56.97
4 Taylor 1975-01-27 Omar 73.61
Si se quiere ordenar alfabéticamente en orden inverso simplemente se agrega el parámetro reverse
configurado a True
en la función sorted
.
df_ordenado = df[sorted(df.columns, reverse=True)]
puntaje nombre fecha_nacimiento apellido
0 65.14 Daniel 1962-11-09 West
1 21.23 Jason 1968-11-19 Campbell
2 82.56 Karen 1999-08-26 Sutton
3 56.97 Robert 1965-08-15 Sims
4 73.61 Omar 1975-01-27 Taylor
Ordenar una columna al principio o final
Para colocar una columna al principio o final del DataFrame deberemos crear una lista que contenga la columna elegida posicione el resto de los nombres de columnas antes o después.
columnas = ["nombre"] + [col for col in df.columns if col != "nombre"]
En este ejemplo estamos concatenando la columna «nombre» al resto de las columnas de la lista. Se están recorriendo todas las columnas del DataFrame obtenidas con df.columns
ignorando la columna elegida con la condición if col != "nombre".
df_ordenado = df[columnas]
nombre apellido fecha_nacimiento puntaje
0 Daniel West 1962-11-09 65.14
1 Jason Campbell 1968-11-19 21.23
2 Karen Sutton 1999-08-26 82.56
3 Robert Sims 1965-08-15 56.97
4 Omar Taylor 1975-01-27 73.61
En caso de querer colocar la columna al final simplemente se concatena el nombre de la columna luego de la lista generada.
columnas =[col for col in df.columns if col != "puntaje"] + ["puntaje"]
df_ordenado = df[columnas]
apellido fecha_nacimiento puntaje nombre
0 West 1962-11-09 65.14 Daniel
1 Campbell 1968-11-19 21.23 Jason
2 Sutton 1999-08-26 82.56 Karen
3 Sims 1965-08-15 56.97 Robert
4 Taylor 1975-01-27 73.61 Omar
Mover columna a una posición específica
Para mover una columna a una posición específica se debe obtener la lista de nombres de columnas, eliminar aquella que se quiere ordenar y finalmente insertarla en la posición deseada.
En el siguiente ejemplo se obtiene la lista de columnas con df.column
s y se la convierte a formato lista con la función list
. Se elimina el nombre de la columna que se quiere ordenar con la función remove
y se inserta nuevamente en la posición deseada con la función insert
especificando el número de posición. Finalmente se usa la lista resultante para reordenar el DataFrame.
columna = "puntaje"
posicion = 3
lista_columnas = list(df.columns)
lista_columnas.remove(columna)
lista_columnas.insert(posicion, columna)
df = df[lista_columnas]
apellido fecha_nacimiento puntaje nombre
0 West 1962-11-09 65.14 Daniel
1 Campbell 1968-11-19 21.23 Jason
2 Sutton 1999-08-26 82.56 Karen
3 Sims 1965-08-15 56.97 Robert
4 Taylor 1975-01-27 73.61 Omar
Reordenar agregando columnas
Es posible ordenar manualmente las columnas del DataFrame agregando columnas nuevas utilizando la función reindex y pasando la lista de nombres de columnas en el parámetro columns.
df_ordenado = df.reindex(columns=["col1", "col2", "col3"])
puntaje nombre apellido nuevo_campo fecha_nacimiento
0 65.14 Daniel West NaN 1962-11-09
1 21.23 Jason Campbell NaN 1968-11-19
2 82.56 Karen Sutton NaN 1999-08-26
3 56.97 Robert Sims NaN 1965-08-15
Cualquier columna nueva agregada será cargada con valores NaN para todos los registros.
En este artículo hemos visto diferentes técnicas para ordenar las columnas en un DataFrame con Pandas. Ordenar columnas en un DataFrame es especialmente útil al preparar datos para informes, presentaciones o exportación, donde un orden lógico o consistente mejora la legibilidad. También facilita el trabajo cuando se comparan múltiples DataFrames o se automatizan procesos, ya que contar con columnas ordenadas alfabéticamente o por prioridad ayuda a evitar errores y mejora la comprensión.