Cómo eliminar filas duplicadas con pandas en Python
Las filas duplicadas en un DataFrame son uno de los problemas más habituales en la limpieza de datos: aparecen cuando combinamos varios ficheros, importamos exportaciones con errores o recogemos los mismos registros dos veces. Si no se eliminan, distorsionan recuentos, medias e informes. Por suerte, eliminar filas duplicadas con pandas en Python es rápido y seguro gracias al método drop_duplicates, y a continuación verás cómo detectarlas, contarlas y eliminarlas con control total.
Requisitos previos
- Python 3 instalado y pandas disponible (
pip install pandas). - Saber crear o cargar un DataFrame (por ejemplo, desde un CSV).
- Un editor o notebook, como Jupyter o VS Code, para ejecutar el código.
Paso 1: Crear un DataFrame de ejemplo
Para que puedas seguir el tutorial sin ficheros externos, empieza creando un DataFrame pequeño con algunas filas repetidas a propósito. Fíjate en que la fila de "Ana" en "Porto" aparece exactamente igual dos veces.
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)
Al imprimir el DataFrame verás cinco filas, de las cuales dos son idénticas. Una fila solo cuenta como duplicada cuando todos los valores coinciden con los de otra: basta con una celda diferente para que pandas la trate como única.
Paso 2: Detectar y contar los duplicados
Antes de eliminar nada, es buena práctica ver cuántas filas están repetidas. El método duplicated() devuelve una serie de valores True y False, marcando como True todas las repeticiones a partir de la segunda aparición. Detectar antes de borrar evita sorpresas, porque sabes cuántas filas vas a perder y puedes inspeccionarlas si hace falta.
# Marca cada linha repetida (exceto a primeira ocorrência)
print(df.duplicated())
# Conta quantas linhas duplicadas existem no total
print(df.duplicated().sum())
En nuestro ejemplo, solo la segunda fila de "Ana" es totalmente idéntica a una anterior, por lo que el recuento devuelve 1.
Paso 3: Eliminar las filas duplicadas
Para quitar las repeticiones, aplica drop_duplicates(). Por defecto, pandas conserva la primera aparición y descarta las siguientes. El método devuelve un nuevo DataFrame y no modifica el original, así que guarda el resultado en una variable.
df_limpo = df.drop_duplicates()
print(df_limpo)
Consejo: evitainplace=True. Reasignar el resultado (como endf_limpo = df.drop_duplicates()) hace que el código sea más claro y fácil de depurar.
Aquí el DataFrame pasa de cinco a cuatro filas, porque se eliminó la repetición de "Ana" y el resto quedó intacto.
Paso 4: Elegir qué aparición conservar
El parámetro keep decide cuál de las repeticiones se queda. Usa "first" (el valor por defecto) para conservar la primera, "last" para conservar la última, o False para eliminar todas las filas que tengan 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)
Paso 5: Duplicados solo en ciertas columnas
A menudo una fila debe considerarse duplicada solo cuando coinciden ciertas columnas, ignorando el resto. El parámetro subset acepta una lista de columnas. En el siguiente ejemplo, dos filas son iguales si comparten el mismo nome, aunque el valor de vendas sea 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"])
Después de eliminar filas, el índice queda con huecos en la numeración. Para renumerarlo desde 0 en adelante, añade ignore_index=True.
df.drop_duplicates(subset=["nome"], ignore_index=True)
Verificar el resultado
Para confirmar que ya no hay repeticiones, vuelve a contar los duplicados en el DataFrame limpio: el total debe ser 0. Comparar el número de filas antes y después también ayuda a ver cuántas se eliminaron. Esta pequeña prueba resulta muy útil cuando ejecutas el mismo script varias veces o cuando los datos llegan de fuentes distintas.
print("Antes:", len(df))
print("Depois:", len(df_limpo))
print("Duplicados restantes:", df_limpo.duplicated().sum())
Si ves Duplicados restantes: 0, la limpieza funcionó como esperabas.
Conclusión
Con duplicated() y drop_duplicates() tienes todo lo necesario para encontrar y eliminar filas repetidas en pandas, eligiendo qué aparición conservar y qué columnas comparar. El siguiente paso es incorporar esta limpieza a tu rutina habitual, antes de agrupar datos o calcular métricas, para garantizar números fiables. Y en tu caso: ¿qué columnas definen realmente una fila "duplicada"?