Eliminar columnas de una DataFrame de Python Pandas... ¡y en Polars!
Veamos las diferentes y mejores maneras de eliminar columnas en un DataFrame usando las dos principales librerías de Python, Pandas y la nueva librería de alto rendimiento llamada Polars.
¿Eres un entusiasta de la ciencia de datos o un profesional que busca agilizar tu flujo de trabajo? Bueno, has llegado al lugar perfecto. En el universo de Python, la biblioteca Pandas es tu aliada clave para conquistar los desafíos del manejo de datos. Imagínate tener en tus manos una caja de herramientas súper potente que transforma la manera en que juegas con los datos. Eso es exactamente lo que Pandas te ofrece.
Ahora, hablemos de una habilidad esencial en tu arsenal de ciencia de datos: eliminar columnas en un DataFrame con Pandas. ¿Por qué es tan crucial? Porque en el mundo real, los datos no siempre llegan en el formato perfecto. A veces, menos es más y necesitas depurar tu DataFrame para obtener esa visión clara que te conducirá a insights impresionantes.
Este artículo no es solo un tutorial, es tu guía definitiva sobre cómo eliminar columnas en Pandas y en Polars, cubriendo varios métodos y ofreciendo ejemplos de código para cada uno.. Prepárate para potenciar tus habilidades. ¡Vamos allá!
Eliminación de columnas en Pandas
Empecemos creando un dataframe inicial al que iremos haciendo diferentes ‘perrerías’.
import pandas as pd
base_df = pd.DataFrame({
'id': [1, 2, 3],
'nombre': ['Ana', 'Carlos', 'Mike'],
'provincia': ['Alicante', 'Alicante', 'Denver'],
'departamento': [3, 3, 3],
'equipo': [17, 17, 25],
})
base_df
## id nombre provincia departamento equipo
## 0 1 Ana Alicante 3 17
## 1 2 Carlos Alicante 3 17
## 2 3 Mike Denver 3 25
1- Método .drop()
Como hemos comentado, drop
puede usarse tanto para filas como para columnas, así que utilizaremos el argumento axis=1
para indicar que nos referimos a las columnas. Para hacer referencia a las filas, usaríamos axis=0
.
Por último, como muchos otros métodos de los Pandas DataFrames, debemos decidir si queremos hacerlo inplace
o no. Esto tendrá efectos en la apariencia de nuestro código y en el rendimiento del programa.
Sin embargo, drop
es uno de los métodos en los que se desaconseja el uso, ya que no presenta mejoras de rendimiento y sólo limita el encadenamiento de funciones (ya que lo hacemos inplace lo que nos devuelve es un None). Más información en este post y en la PDEP-8 donde podéis seguir la conversación sobre el tema, abierta a fecha de publicación 16/11.
En caso de no usar inplace, deberemos reasignar el resultado del drop
.
# Eliminar una columna
base_df.drop('provincia', axis=1) #, inplace=True) en caso de que no queramos, por defecto a false
# Eliminar múltiples columnas
## id nombre departamento equipo
## 0 1 Ana 3 17
## 1 2 Carlos 3 17
## 2 3 Mike 3 25
## nombre provincia equipo
## 0 Ana Alicante 17
## 1 Carlos Alicante 17
## 2 Mike Denver 25
2- Selección de columnas mediante corchetes []
y métodos .loc
e .iloc
## nombre provincia
## 0 Ana Alicante
## 1 Carlos Alicante
## 2 Mike Denver
También podemos usar loc / iloc para la selección de columnas. Esta opción suele ser muy poco más lenta que la anterior si sólo quieres eliminar columnas, mientras ofrece mucha más flexibilidad.
## nombre provincia
## 0 Ana Alicante
## 1 Carlos Alicante
## 2 Mike Denver
## nombre provincia
## 0 Ana Alicante
## 1 Carlos Alicante
## 2 Mike Denver
Lo bueno del método nativo de Pandas, es que nos ofrece una manera flexible de selección de columnas y filas por los filtros y condiciones que nosotros queramos fácilmente.
3- Uso de del
Limitaciones: Es menos flexible que drop(), ya que solo puede eliminar una columna a la vez y no devuelve una copia del DataFrame, lo que puede ser un inconveniente en ciertos flujos de trabajo. el funcionamiento es como el inplace
del método drop.
## id nombre equipo
## 0 1 Ana 17
## 1 2 Carlos 17
## 2 3 Mike 25
Importante: usamos el método copy()
a la hora de hacer una copia del dataframe. En caso de no hacerlo, lo que hacemos es hacer una copia por referencia
por lo que las modificaciones que le hagamos al objeto nuevo, serán también aplicados al dataframe original. Veamos el ejemplo:
## id nombre
## 0 1 Ana
## 1 2 Carlos
## 2 3 Mike
Eliminar columnas en Polars
Usemos el DataFrame de Pandas y transformémoslo a Polars:
Del mismo modo que lo hacíamos en Pandas, Polars implementa n método para sus dataframes con el mismo nombre drop
.
nombre | provincia | departamento |
---|---|---|
str | str | i64 |
"Ana" | "Alicante" | 3 |
"Carlos" | "Alicante" | 3 |
"Mike" | "Denver" | 3 |
También se podemos indicar el nombre de las columnas separadas por coma sin usar una lista.
Otra que manera que tenemos disponible es usar los Polars selectors junto con drop
, pudiendo eliminar columnas de manera más interesante. Podemos eliminar columnas de un dataframe según su tipo.
## [Int64, Utf8, Utf8, Int64, Int64]
nombre | provincia |
---|---|
str | str |
"Ana" | "Alicante" |
"Carlos" | "Alicante" |
"Mike" | "Denver" |
Deberemos, como anteriormente, reasignar el resultado o bien a la misma variable, o bien a una nueva según convenga.
Por último, para eliminar columnas en base a su contenido (más allá del tipo), no tenemos una manera ‘pytonica’ de hacerlo con la API de Polars y que encaje por ejemplo en un pipeline Lazy. Deberemos materializar los datos y obtener los nombres de las columnas que cumplan nuestras condiciones deseadas, y ahora sí se podría incluir dentro de un drop
.
# Seleccionamos las columas de texto donde el número de elementos únicos sea mayor a 2
col_name_diff = [col.name for col in base_df_pl.select(cs.string().n_unique() > 2) if col.all()]
base_df_pl.select(col_name_diff)
nombre |
---|
str |
"Ana" |
"Carlos" |
"Mike" |
Mantente al día de las novedades de Pandas y Polars
Espero que esta publicación te haya ayudado a familiarizarte con la selección y eliminación de columnas en dataframes de Pandas y Polars, y te haya permitido disfrutar de una exhibición de algunas de sus características.
Si deseas mantenerte actualizado y no perderte nada…