Pandas Drop Column: Como remover colunas de um DataFrame
Updated on
DataFrames de fontes do mundo real raramente chegam com apenas as colunas que você precisa. Exportações CSV incluem colunas de metadados, consultas a bancos de dados trazem campos extras e respostas de API contêm dados aninhados que você já achatou. Antes de qualquer análise significativa, você precisa remover as colunas irrelevantes. Errar nisso -- acidentalmente remover a coluna errada ou modificar o DataFrame original quando pretendia criar uma cópia -- causa bugs de perda de dados que podem ser difíceis de rastrear.
O Pandas fornece vários métodos para remover colunas, cada um adequado a diferentes situações. O método drop() é o mais versátil, mas del, pop() e seleção de colunas oferecem alternativas úteis. Este guia cobre cada abordagem com exemplos claros mostrando quando usar cada uma.
Usando df.drop() -- A abordagem padrão
O método drop() é a forma principal de remover colunas. Passe nomes de colunas e defina axis=1 (ou use o parâmetro columns).
Remover uma única coluna
import pandas as pd
df = pd.DataFrame({
'name': ['Alice', 'Bob', 'Charlie'],
'age': [25, 30, 35],
'salary': [50000, 60000, 70000],
'department': ['Engineering', 'Marketing', 'Sales'],
})
# Método 1: Usando o parâmetro columns (recomendado)
df_clean = df.drop(columns=['salary'])
print(df_clean)
# Método 2: Usando axis=1
df_clean = df.drop('salary', axis=1)Remover múltiplas colunas
import pandas as pd
df = pd.DataFrame({
'id': [1, 2, 3],
'name': ['Alice', 'Bob', 'Charlie'],
'email': ['a@test.com', 'b@test.com', 'c@test.com'],
'temp_col': [None, None, None],
'internal_id': ['X1', 'X2', 'X3'],
})
# Remover múltiplas colunas de uma vez
df_clean = df.drop(columns=['temp_col', 'internal_id', 'email'])
print(df_clean)
# id name
# 0 1 Alice
# 1 2 Bob
# 2 3 CharlieParâmetro inplace
Por padrão, drop() retorna um novo DataFrame. Use inplace=True para modificar o original:
import pandas as pd
df = pd.DataFrame({'a': [1], 'b': [2], 'c': [3]})
# Retorna novo DataFrame (original inalterado)
new_df = df.drop(columns=['b'])
print(df.columns.tolist()) # ['a', 'b', 'c'] (inalterado)
print(new_df.columns.tolist()) # ['a', 'c']
# Modifica o DataFrame original
df.drop(columns=['b'], inplace=True)
print(df.columns.tolist()) # ['a', 'c']Tratamento de colunas inexistentes com o parâmetro errors
import pandas as pd
df = pd.DataFrame({'a': [1], 'b': [2], 'c': [3]})
# Padrão: levanta KeyError se a coluna não existir
# df.drop(columns=['d']) # KeyError: "['d'] not found in axis"
# Ignorar colunas inexistentes
df_clean = df.drop(columns=['b', 'd'], errors='ignore')
print(df_clean.columns.tolist()) # ['a', 'c']Usando a instrução del
A instrução del remove uma coluna in-place. É concisa mas limitada a uma coluna por vez.
import pandas as pd
df = pd.DataFrame({'a': [1, 2], 'b': [3, 4], 'c': [5, 6]})
del df['b']
print(df.columns.tolist()) # ['a', 'c']Limitações: Não pode deletar múltiplas colunas de uma vez. Não pode ignorar colunas inexistentes (levanta KeyError). Sempre modifica in-place.
Usando df.pop()
pop() remove uma coluna e a retorna como Series. Útil quando você precisa da coluna removida para uso posterior.
import pandas as pd
df = pd.DataFrame({
'name': ['Alice', 'Bob'],
'target': [1, 0],
'feature1': [10, 20],
'feature2': [30, 40],
})
# Extrair a coluna alvo enquanto a remove do DataFrame
y = df.pop('target')
X = df
print(y)
# 0 1
# 1 0
# Name: target, dtype: int64
print(X)
# name feature1 feature2
# 0 Alice 10 30
# 1 Bob 20 40Selecionar colunas (inverso de remover)
Às vezes é mais fácil selecionar as colunas que você quer do que listar as que quer remover.
import pandas as pd
df = pd.DataFrame({
'name': ['Alice', 'Bob'],
'age': [25, 30],
'salary': [50000, 60000],
'dept': ['Eng', 'Mkt'],
'internal_id': ['X1', 'X2'],
})
# Manter apenas colunas específicas
df_clean = df[['name', 'age', 'salary']]
# Remover colunas selecionando tudo exceto elas
df_clean = df.loc[:, df.columns != 'internal_id']
# Manter colunas que atendam a uma condição
df_numeric = df.select_dtypes(include='number')
print(df_numeric)
# age salary
# 0 25 50000
# 1 30 60000Remover colunas por padrão ou condição
Remover colunas por padrão de nome
import pandas as pd
df = pd.DataFrame({
'name': ['Alice'], 'age': [25],
'temp_1': [None], 'temp_2': [None],
'internal_flag': [True],
})
# Remover colunas que começam com 'temp_'
cols_to_drop = [c for c in df.columns if c.startswith('temp_')]
df_clean = df.drop(columns=cols_to_drop)
print(df_clean.columns.tolist()) # ['name', 'age', 'internal_flag']
# Remover colunas contendo 'internal'
cols_to_drop = [c for c in df.columns if 'internal' in c]
df_clean = df.drop(columns=cols_to_drop)
# Usar filter() para manter colunas correspondentes
df_temps = df.filter(like='temp') # Mantém apenas colunas contendo 'temp'
df_no_temps = df.drop(columns=df.filter(like='temp').columns)Remover colunas por tipo de dados
import pandas as pd
df = pd.DataFrame({
'name': ['Alice', 'Bob'],
'age': [25, 30],
'score': [95.5, 87.3],
'active': [True, False],
})
# Remover todas as colunas não numéricas
df_numeric = df.select_dtypes(include='number')
# Remover todas as colunas object (string)
df_no_strings = df.select_dtypes(exclude='object')
print(df_no_strings.columns.tolist()) # ['age', 'score', 'active']Remover colunas com muitos valores ausentes
import pandas as pd
import numpy as np
df = pd.DataFrame({
'a': [1, 2, 3, 4, 5],
'b': [1, np.nan, np.nan, np.nan, np.nan],
'c': [1, 2, np.nan, 4, 5],
'd': [np.nan, np.nan, np.nan, np.nan, np.nan],
})
# Remover colunas onde mais de 50% dos valores estão ausentes
threshold = len(df) * 0.5
df_clean = df.dropna(axis=1, thresh=int(threshold))
print(df_clean.columns.tolist()) # ['a', 'c']Comparação de métodos
| Método | Retorna | In-Place | Múltiplas cols | Tratamento de col ausente |
|---|---|---|---|---|
df.drop(columns=...) | Novo DataFrame | Opcional (inplace) | Sim | errors='ignore' |
del df[col] | Nada | Sempre | Não (uma por vez) | Levanta KeyError |
df.pop(col) | Series removida | Sempre | Não (uma por vez) | Levanta KeyError |
df[cols_to_keep] | Novo DataFrame | Não | Sim (inverso) | Levanta KeyError |
df.select_dtypes() | Novo DataFrame | Não | Por dtype | N/A |
Visualizando seu DataFrame limpo
Após remover colunas e limpar seus dados, PyGWalker (opens in a new tab) fornece uma interface interativa estilo Tableau para explorar o DataFrame limpo diretamente no Jupyter:
import pygwalker as pyg
# Após limpar seu DataFrame
walker = pyg.walk(df_clean)Isso permite arrastar e soltar as colunas restantes para criar gráficos sem escrever código de plotagem.
FAQ
Como remover uma coluna no pandas?
Use df.drop(columns=['nome_coluna']) para remover uma coluna e retornar um novo DataFrame. Para remoção in-place, adicione inplace=True. Você também pode usar del df['nome_coluna'] para exclusão rápida in-place, ou df.pop('nome_coluna') para remover e retornar a coluna como Series.
Como remover múltiplas colunas de uma vez?
Passe uma lista de nomes de colunas para df.drop(columns=['col1', 'col2', 'col3']). Isso remove todas as colunas especificadas em uma única operação e retorna um novo DataFrame.
Como remover colunas condicionalmente (por padrão ou tipo de dados)?
Para padrões de nome, use compreensão de lista: df.drop(columns=[c for c in df.columns if c.startswith('temp_')]). Para tipos de dados, use df.select_dtypes(exclude='object') para remover colunas de texto, ou df.select_dtypes(include='number') para manter apenas colunas numéricas.
Qual é a diferença entre drop() e del para remover colunas?
df.drop() retorna um novo DataFrame por padrão, pode lidar com múltiplas colunas de uma vez e tem a opção errors='ignore' para colunas ausentes. del df[col] sempre modifica in-place, funciona em uma coluna por vez e levanta KeyError se a coluna não existir.
Como remover colunas com valores ausentes?
Use df.dropna(axis=1) para remover qualquer coluna que tenha pelo menos um NaN. Use df.dropna(axis=1, thresh=n) para manter apenas colunas com pelo menos n valores não nulos. Para limites personalizados, filtre pela porcentagem de nulos: df.loc[:, df.isnull().mean() < 0.5] mantém colunas com menos de 50% de dados ausentes.
Conclusão
Para a maioria das situações, df.drop(columns=[...]) é a escolha certa -- é explícito, lida com múltiplas colunas e retorna um novo DataFrame por padrão. Use del para exclusão rápida in-place de uma única coluna, pop() quando precisar da coluna removida, e seleção de colunas ou select_dtypes() quando for mais fácil especificar o que manter do que o que remover.