HOWTO · Pandas

Pandas Excluir Columna

Este tutorial explica cómo podemos obtener todas las columnas de un DataFrame excepto una columna en particular.

En esta página

Para excluir columnas de un DataFrame de Pandas, usa drop() para eliminar etiquetas directamente, loc para aplicar una condición a los nombres de las columnas o Index.difference() si su comportamiento de ordenación es adecuado para el resultado. Los ejemplos usan una tabla de acciones; cada muestra de código crea sus propios datos para que puedas ejecutarla de forma independiente.

Seleccionar todas las columnas excepto una con loc

Usa loc con una selección completa de filas y una condición booleana sobre las etiquetas de las columnas. El segmento de filas : conserva todas las filas; stocks_df.columns != "Sector" es verdadero para cada columna cuya etiqueta no sea Sector, así que solo se conservan esas columnas. loc es un accesor para seleccionar filas y columnas, no un método que se invoque con paréntesis. Consulta la propiedad loc para conocer su sintaxis de selección.

Ejecuta este ejemplo. El código y las etiquetas o salidas visibles se mantienen en inglés.

import pandas as pd

stocks_df = pd.DataFrame(
    {
        "Stock": ["Amazon", "Tesla", "Facebook", "Boeing"],
        "Price(in $)": [3180, 835, 267, 209],
        "Sector": ["Technology", "Technology", "Technology", "Aircraft"],
    }
)

filtered_df = stocks_df.loc[:, stocks_df.columns != "Sector"]
print(filtered_df)

La tabla resultante contiene las columnas Stock y Price(in $). Este patrón resulta útil cuando la exclusión puede expresarse como una regla sobre las etiquetas; si cambias la comparación, puedes conservar o quitar otra columna con nombre.

Excluir una o varias columnas con drop()

Para eliminar etiquetas directamente, drop() acepta el argumento columns. Pasa una cadena para excluir una columna y una lista de cadenas para excluir varias. Esta forma deja claro que las etiquetas corresponden a columnas; la forma equivalente con eje es drop(labels, axis=1). De forma predeterminada, drop() devuelve un DataFrame nuevo y deja stocks_df sin cambios, así que asigna el resultado si quieres usarlo más adelante.

El código y las etiquetas o salidas visibles de esta sección se mantienen en inglés.

import pandas as pd

stocks_df = pd.DataFrame(
    {
        "Stock": ["Amazon", "Tesla", "Facebook", "Boeing"],
        "Price(in $)": [3180, 835, 267, 209],
        "Sector": ["Technology", "Technology", "Technology", "Aircraft"],
    }
)

without_sector = stocks_df.drop(columns="Sector")
without_sector_and_price = stocks_df.drop(columns=["Sector", "Price(in $)"])
print(without_sector)
print(without_sector_and_price)

El primer resultado conserva Stock y Price(in $); el segundo conserva solo Stock. Ambas operaciones parten de la tabla original, ya que ninguna llamada la modifica de forma predeterminada. Usa la lista cuando quieras eliminar varias etiquetas en una sola operación. El código y las etiquetas o salidas visibles de este ejemplo se mantienen en inglés.

Excluir columnas con Index.difference()

Index.difference() resta las etiquetas excluidas del índice de etiquetas de las columnas. Usa el índice resultante para seleccionar las columnas. De forma predeterminada, difference() ordena las etiquetas que devuelve, por lo que la tabla puede tener un orden de columnas distinto al de la original aunque los datos restantes no cambien.

El código y las etiquetas o salidas visibles de esta sección se mantienen en inglés.

import pandas as pd

stocks_df = pd.DataFrame(
    {
        "Stock": ["Amazon", "Tesla", "Facebook", "Boeing"],
        "Price(in $)": [3180, 835, 267, 209],
        "Sector": ["Technology", "Technology", "Technology", "Aircraft"],
    }
)

remaining_columns = stocks_df.columns.difference(["Sector"])
filtered_df = stocks_df[remaining_columns]
print(filtered_df)

Aquí las etiquetas restantes aparecen en orden alfabético, por lo que Price(in $) queda antes de Stock, al contrario que en el DataFrame original. Si es importante conservar el orden de la fuente, es preferible usar drop() o la condición con loc explicada antes, en lugar de depender del orden predeterminado de difference(). El código y las etiquetas o salidas visibles de este ejemplo se mantienen en inglés.

Elegir un método para excluir columnas

Elige drop() cuando conozcas las etiquetas que quieres eliminar y busques la expresión más directa; usa su argumento columns tanto para una etiqueta como para una lista. Elige loc cuando la regla para conservar o eliminar columnas dependa de sus nombres, ya que su máscara booleana hace visible la lógica de selección. Elige Index.difference() cuando te resulte útil la resta de conjuntos y aceptes el orden predeterminado de las etiquetas.

Los tres métodos seleccionan columnas del mismo DataFrame, pero aplican reglas distintas: etiquetas explícitas con drop(), una condición booleana con loc y una resta de índices con Index.difference(). Comprueba el orden resultante si el código posterior depende de las posiciones. Para eliminar columnas con nombres concretos, drop(columns=...) suele ser el punto de partida más claro.