HOWTO · Pandas

Pandas Excluir Coluna

Este tutorial explica como podemos obter todas as colunas de um DataFrame, excepto uma coluna em particular.

Nesta página

Para excluir colunas de um Pandas DataFrame, use drop() para remover rótulos diretamente, loc para aplicar uma condição aos nomes das colunas ou Index.difference() quando o comportamento de ordenação for adequado ao resultado. Os exemplos usam uma tabela de ações; cada amostra de código cria seus próprios dados para que possa ser executada de forma independente.

Selecionar todas as colunas, exceto uma, com loc

Use loc com uma fatia completa das linhas e uma condição booleana aplicada aos rótulos das colunas. A fatia : mantém todas as linhas; stocks_df.columns != "Sector" é verdadeira para cada coluna cujo rótulo não é Sector, portanto, apenas essas colunas permanecem. loc é um acessor para selecionar linhas e colunas, não um método chamado com parênteses. Consulte a propriedade loc para ver a sintaxe de seleção.

Execute este exemplo. Os rótulos e as saídas mostrados permanecem em 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)

A tabela resultante contém as colunas Stock e Price(in $). Esse padrão é útil quando a exclusão pode ser expressa naturalmente como uma regra aplicada aos rótulos; alterar a comparação permite manter ou remover outra coluna nomeada.

Excluir uma ou mais colunas com drop()

Para remover colunas diretamente pelos rótulos, drop() aceita o argumento columns. Passe uma string para uma coluna ou uma lista de strings para várias. Essa forma deixa claro que os rótulos se referem a colunas; a forma equivalente com eixo é drop(labels, axis=1). Por padrão, drop() retorna um novo DataFrame e mantém stocks_df inalterado; atribua o resultado se quiser usá-lo depois.

O código e os rótulos ou saídas exibidos nesta seção permanecem em 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)

O primeiro resultado mantém Stock e Price(in $); o segundo mantém apenas Stock. As duas operações partem da tabela original, pois nenhuma das chamadas a altera por padrão. Use a forma com lista quando quiser remover vários rótulos em uma única operação.

Excluir colunas com Index.difference()

Index.difference() subtrai os rótulos a excluir do Index de rótulos das colunas. Use o Index resultante para selecionar as colunas. Por padrão, difference() ordena os rótulos retornados; por isso, a tabela pode ficar com uma ordem de colunas diferente da original, embora os dados restantes não sejam alterados.

O código e os rótulos ou saídas exibidos nesta seção permanecem em 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)

Neste exemplo, os rótulos restantes ficam em ordem alfabética, então Price(in $) aparece antes de Stock, ao contrário da ordem no DataFrame original. Se for importante manter a ordem de origem, prefira drop() ou a condição com loc apresentada acima, em vez de depender da ordenação padrão de difference.

Escolher uma abordagem para excluir colunas

Escolha drop() quando souber quais rótulos remover e quiser a expressão mais direta; use o argumento columns tanto para um rótulo quanto para uma lista. Escolha loc quando a regra para manter ou remover colunas depender de uma condição sobre os nomes, pois a máscara booleana deixa explícita essa lógica de seleção. Escolha Index.difference() quando a subtração de conjuntos for útil e a ordenação padrão dos rótulos for aceitável.

As três abordagens selecionam colunas do mesmo DataFrame, mas usam regras diferentes: rótulos explícitos com drop(), uma condição booleana com loc e subtração de Index com Index.difference(). Confira a ordem resultante das colunas se o código subsequente depender das posições. Para remover colunas nomeadas em casos comuns, drop(columns=...) costuma ser o ponto de partida mais claro.