¿Cómo eliminar una columna en pandas?
Respuesta corta: usa df = df.drop(columns="nombre_columna"). Para quitar varias a la vez, pasa una lista: df.drop(columns=["col1", "col2"]). drop() devuelve un DataFrame nuevo, así que guarda el resultado.
import pandas as pd
df = pd.DataFrame({
"id": [1, 2, 3],
"nombre": ["Ana", "Luis", "Marta"],
"edad": [28, 34, 25],
"tmp_a": [0, 0, 0],
"tmp_b": [1, 1, 1],
"notas": [None, None, None],
})
df = df.drop(columns="notas")
print(df.columns.tolist())['id', 'nombre', 'edad', 'tmp_a', 'tmp_b']Si solo quieres ver el resultado sin cambiar df, no lo guardes: df.drop(columns="notas") devuelve la tabla sin esa columna y deja df igual.
drop(), del y pop() eliminan columnas, pero cada uno funciona distinto.
5 formas de eliminar columnas en pandas
| Forma | Ejemplo | Cambia df | Devuelve |
|---|---|---|---|
drop() | df = df.drop(columns=["a", "b"]) | No, guardas el resultado | Un DataFrame nuevo |
del | del df["a"] | Sí | Nada |
pop() | valores = df.pop("a") | Sí | La columna eliminada, como Serie |
| Seleccionar las que quedan | df = df[["c", "d"]] | No, guardas el resultado | Un DataFrame nuevo |
drop(..., inplace=True) | df.drop(columns="a", inplace=True) | Sí | None |
drop() es la más flexible, porque acepta listas y errors="ignore". del es la más corta para una sola columna, y pop() sirve cuando además necesitas los valores.
Ejemplos para eliminar columnas en pandas
Los ejemplos parten del DataFrame original, con las columnas id, nombre, edad, tmp_a, tmp_b y notas.
Eliminar varias columnas
df = df.drop(columns=["tmp_a", "tmp_b"])Eliminar una columna con del
del df["notas"]del cambia df directamente y solo acepta una columna cada vez.
Sacar una columna y guardar sus valores con pop()
edades = df.pop("edad")
print(edades.tolist()) # [28, 34, 25]
print(df.columns.tolist()) # ['id', 'nombre', 'tmp_a', 'tmp_b', 'notas']Es útil en machine learning para separar la columna objetivo del resto: y = df.pop("precio").
Quedarte solo con las columnas que necesitas
Cuando sobran muchas columnas, es más corto elegir las que se quedan:
df = df[["nombre", "edad"]]Eliminar columnas por su posición
df.drop(columns=df.columns[[0, 3]]) # sin la primera ni la cuarta
df.iloc[:, 1:3] # solo las posiciones 1 y 2Eliminar columnas que empiezan por un texto
df = df.loc[:, ~df.columns.str.startswith("tmp_")]['id', 'nombre', 'edad', 'notas']df.drop(columns=df.filter(like="tmp_").columns) hace lo mismo con las columnas que contienen tmp_ en cualquier parte del nombre.
Eliminar columnas vacías
df = df.dropna(axis=1, how="all")how="all" quita solo las columnas en las que todos los valores están vacíos. Con how="any" quitarías las que tengan al menos uno.
Eliminar columnas con un solo valor
df = df.loc[:, df.nunique() > 1]Las columnas con el mismo valor en todas las filas, como tmp_a y tmp_b, no aportan información a un análisis.
Eliminar columnas duplicadas
df = df.loc[:, ~df.columns.duplicated()]Pasa al unir tablas o al leer archivos con encabezados repetidos.
No cargar la columna desde el archivo
Si la columna viene de un CSV, puedes no leerla: pd.read_csv("ventas.csv", usecols=["id", "nombre", "edad"]). Ahorra memoria con archivos grandes.
