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.

Polars Python con mensaje que dice 'json'

¿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 inplaceo no. Esto tendrá efectos en la apariencia de nuestro código y en el rendimiento del programa. Sin embargo, dropes 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
base_df.drop(['id', 'departamento'], axis=1) # inplace=True)
##    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

base_df[['nombre', 'provincia']]
##    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.

base_df.loc[:, ['nombre', 'provincia']]
##    nombre provincia
## 0     Ana  Alicante
## 1  Carlos  Alicante
## 2    Mike    Denver
base_df.loc[:, ['nombre', 'provincia']]
##    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.

copia_df = base_df.copy()
del copia_df['departamento']
del copia_df['provincia']
copia_df
##    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:

copia_de_copia_df = copia_df
del copia_de_copia_df['equipo']
copia_df
##    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:

import polars as pl # usando version 0.19.3

base_df_pl = pl.from_pandas(base_df)

Del mismo modo que lo hacíamos en Pandas, Polars implementa n método para sus dataframes con el mismo nombre drop.

base_df_pl.drop(["id","equipo"])
shape: (3, 3)
nombreprovinciadepartamento
strstri64
"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.

import polars.selectors as cs

base_df_pl.dtypes
## [Int64, Utf8, Utf8, Int64, Int64]
base_df_pl.drop(cs.numeric())
shape: (3, 2)
nombreprovincia
strstr
"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)
shape: (3, 1)
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…

Python Pandas Polars
Carlos Vecina
Carlos Vecina
Senior Data Scientist at Jobandtalent

Senior Data Scientist at Jobandtalent | AI & Data Science para aportar valor en la empresa

Relacionado