(+351) 21 24 10006  ·  info@bconcepts.pt
Carnaxide, Lisboa

Como remover linhas duplicadas com pandas em Python

João Barros 15 de July de 2026 4 min de leitura

Linhas repetidas num DataFrame são um dos problemas mais comuns na limpeza de dados: aparecem quando juntamos vários ficheiros, importamos exportações com erros ou recolhemos os mesmos registos duas vezes. Se não forem removidas, distorcem contagens, médias e relatórios. Felizmente, remover linhas duplicadas com pandas em Python é rápido e seguro graças ao método drop_duplicates, e a seguir vais ver como detetá-las, contá-las e eliminá-las com controlo total.

Pré-requisitos

  • Python 3 instalado e o pandas disponível (pip install pandas).
  • Saber criar ou carregar um DataFrame (por exemplo, a partir de um CSV).
  • Um editor ou notebook, como o Jupyter ou o VS Code, para correr o código.

Passo 1: Criar um DataFrame de exemplo

Para acompanhares sem depender de ficheiros externos, começa por criar um pequeno DataFrame com algumas linhas repetidas de propósito. Repara que a linha da "Ana" no "Porto" aparece exatamente igual duas vezes.

import pandas as pd

df = pd.DataFrame({
    "nome": ["Ana", "Bruno", "Ana", "Carla", "Bruno"],
    "cidade": ["Porto", "Lisboa", "Porto", "Braga", "Faro"],
    "vendas": [100, 200, 100, 300, 250],
})

print(df)

Ao imprimir o DataFrame vais ver cinco linhas, das quais duas são idênticas. Uma linha só conta como duplicada quando todos os valores coincidem com os de outra: basta uma célula diferente para o pandas a considerar única.

Passo 2: Detetar e contar os duplicados

Antes de remover seja o que for, é boa prática ver quantas linhas estão repetidas. O método duplicated() devolve uma série de valores True e False, marcando como True todas as repetições a partir da segunda ocorrência. Detetar antes de apagar evita surpresas, porque ficas a saber quantas linhas vais perder e podes inspecioná-las se for preciso.

# Marca cada linha repetida (exceto a primeira ocorrência)
print(df.duplicated())

# Conta quantas linhas duplicadas existem no total
print(df.duplicated().sum())

No nosso exemplo, apenas a segunda linha da "Ana" é totalmente igual a uma anterior, por isso a contagem devolve 1.

Passo 3: Remover as linhas duplicadas

Para eliminar as repetições, aplica drop_duplicates(). Por predefinição, o pandas mantém a primeira ocorrência e descarta as seguintes. O método devolve um novo DataFrame e não altera o original, por isso guarda o resultado numa variável.

df_limpo = df.drop_duplicates()
print(df_limpo)
Dica: evita inplace=True. Reatribuir o resultado (como em df_limpo = df.drop_duplicates()) torna o código mais claro e fácil de depurar.

Neste caso o DataFrame passa de cinco para quatro linhas, porque a repetição da "Ana" foi removida e as restantes ficaram intactas.

Passo 4: Escolher que ocorrência manter

O parâmetro keep decide qual das repetições fica. Usa "first" (predefinição) para manter a primeira, "last" para manter a última, ou False para eliminar todas as linhas que tenham duplicados.

# Mantém a última ocorrência de cada duplicado
df.drop_duplicates(keep="last")

# Remove TODAS as linhas que aparecem mais do que uma vez
df.drop_duplicates(keep=False)

Passo 5: Duplicados apenas em certas colunas

Muitas vezes uma linha deve ser considerada duplicada apenas quando certas colunas coincidem, ignorando as restantes. O parâmetro subset aceita uma lista de colunas. No exemplo seguinte, duas linhas são iguais se tiverem o mesmo nome, mesmo que o valor de vendas seja diferente.

# Considera duplicado quando o "nome" se repete
df.drop_duplicates(subset=["nome"])

# Também podes comparar várias colunas ao mesmo tempo
df.drop_duplicates(subset=["nome", "cidade"])

Depois de remover linhas, o índice fica com "buracos" na numeração. Para o reordenar de 0 em diante, acrescenta ignore_index=True.

df.drop_duplicates(subset=["nome"], ignore_index=True)

Verificar o resultado

Para confirmar que já não há repetições, volta a contar os duplicados no DataFrame limpo: o total deve ser 0. Comparar o número de linhas antes e depois também ajuda a perceber quantas foram removidas. Este pequeno teste é útil sobretudo quando corres o mesmo script várias vezes ou quando os dados chegam de fontes diferentes.

print("Antes:", len(df))
print("Depois:", len(df_limpo))
print("Duplicados restantes:", df_limpo.duplicated().sum())

Se vires Duplicados restantes: 0, a limpeza correu como esperado.

Conclusão

Com duplicated() e drop_duplicates() tens tudo o que precisas para encontrar e remover linhas repetidas em pandas, escolhendo que ocorrência manter e que colunas comparar. O passo seguinte é incluir esta limpeza na tua rotina habitual, antes de agrupar dados ou calcular métricas, para garantir números fiáveis. E no teu caso: que colunas definem realmente uma linha "duplicada"?