Ordenamiento de columnas con Pandas

Publicado por Andrea Navarro en

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.columns 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.


¿Preguntas? ¿Comentarios?

Si tenés dudas, o querés dejarnos tus comentarios y consultas, sumate al grupo de Telegram de la comunidad JuncoTIC!
¡Te esperamos!


Andrea Navarro

- Ingeniera en Informática - Docente universitaria - Investigadora