Pandas Largar Linhas Duplicadas

Suraj Joshi 30 janeiro 2023
  1. DataFrame.drop_duplicates() Sintaxe
  2. Remover linhas duplicadas utilizando o DataFrame.drop_duplicates() Método
  3. Definir keep='last' no método drop_duplicates()
Pandas Largar Linhas Duplicadas

Este tutorial explica como podemos remover todas as linhas duplicadas de um Pandas DataFrame utilizando o método DataFrame.drop_duplicates().

DataFrame.drop_duplicates() Sintaxe

DataFrame.drop_duplicates(subset=None, keep="first", inplace=False, ignore_index=False)

Retorna um DataFrame removendo todas as filas repetidas no DataFrame.

Remover linhas duplicadas utilizando o DataFrame.drop_duplicates() Método

import pandas as pd

df_with_duplicates = pd.DataFrame(
    {
        "Id": [302, 504, 708, 103, 303, 302],
        "Name": ["Watch", "Camera", "Phone", "Shoes", "Watch", "Watch"],
        "Cost": ["300", "400", "350", "100", "300", "300"],
    }
)

df_without_duplicates = df_with_duplicates.drop_duplicates()

print("DataFrame with duplicates:")
print(df_with_duplicates, "\n")

print("DataFrame without duplicates:")
print(df_without_duplicates, "\n")

Resultado:

DataFrame with duplicates:
    Id    Name Cost
0  302   Watch  300
1  504  Camera  400
2  708   Phone  350
3  103   Shoes  100
4  303   Watch  300
5  302   Watch  300 

DataFrame without duplicates:
    Id    Name Cost
0  302   Watch  300
1  504  Camera  400
2  708   Phone  350
3  103   Shoes  100
4  303   Watch  300 

Retira as linhas com os mesmos valores todos para todas as colunas. Por defeito, apenas as linhas com os mesmos valores para cada coluna na DataFrame são consideradas como duplicadas. No df_with_duplicates DataFrame, a primeira e quinta fila têm os mesmos valores para todas as colunas, s que a quinta fila é removida.

Definir o parâmetro subset para Remover Duplicatas com base apenas em Colunas Específicas

import pandas as pd

df_with_duplicates = pd.DataFrame(
    {
        "Id": [302, 504, 708, 103, 303, 302],
        "Name": ["Watch", "Camera", "Phone", "Shoes", "Watch", "Watch"],
        "Cost": ["300", "400", "350", "100", "300", "300"],
    }
)

df_without_duplicates = df_with_duplicates.drop_duplicates(subset=["Name"])

print("DataFrame with duplicates:")
print(df_with_duplicates, "\n")

print("DataFrame without duplicates:")
print(df_without_duplicates, "\n")

Resultado:

DataFrame with duplicates:
    Id    Name Cost
0  302   Watch  300
1  504  Camera  400
2  708   Phone  350
3  103   Shoes  100
4  303   Watch  300
5  302   Watch  300 

DataFrame without duplicates:
    Id    Name Cost
0  302   Watch  300
1  504  Camera  400
2  708   Phone  350
3  103   Shoes  100 

Aqui, passamos o Name como argumento subset para o método drop_duplicates(). As quarta e quinta filas são removidas, pois têm o mesmo valor da coluna Name que a primeira coluna.

Definir keep='last' no método drop_duplicates()

import pandas as pd

df_with_duplicates = pd.DataFrame(
    {
        "Id": [302, 504, 708, 103, 303, 302],
        "Name": ["Watch", "Camera", "Phone", "Shoes", "Watch", "Watch"],
        "Cost": ["300", "400", "350", "100", "300", "300"],
    }
)

df_without_duplicates = df_with_duplicates.drop_duplicates(subset=["Name"], keep="last")

print("DataFrame with duplicates:")
print(df_with_duplicates, "\n")

print("DataFrame without duplicates:")
print(df_without_duplicates, "\n")

Resultado:

DataFrame with duplicates:
    Id    Name Cost
0  302   Watch  300
1  504  Camera  400
2  708   Phone  350
3  103   Shoes  100
4  303   Watch  300
5  302   Watch  300 

DataFrame without duplicates:
    Id    Name Cost
1  504  Camera  400
2  708   Phone  350
3  103   Shoes  100
5  302   Watch  300 

Remove todas as linhas excepto a última linha que tem o mesmo valor que a coluna Name.

Definimos keep=False para remover todas as filas com o mesmo valor de qualquer coluna.

import pandas as pd

df_with_duplicates = pd.DataFrame(
    {
        "Id": [302, 504, 708, 103, 303, 302],
        "Name": ["Watch", "Camera", "Phone", "Shoes", "Watch", "Watch"],
        "Cost": ["300", "400", "350", "100", "300", "300"],
    }
)

df_without_duplicates = df_with_duplicates.drop_duplicates(subset=["Name"], keep=False)

print("DataFrame with duplicates:")
print(df_with_duplicates, "\n")

print("DataFrame without duplicates:")
print(df_without_duplicates, "\n")

Resultado:

DataFrame with duplicates:
    Id    Name Cost
0  302   Watch  300
1  504  Camera  400
2  708   Phone  350
3  103   Shoes  100
4  303   Watch  300
5  302   Watch  300 

DataFrame without duplicates:
    Id    Name Cost
1  504  Camera  400
2  708   Phone  350
3  103   Shoes  100 

Remove a primeira, quinta e sexta filas, uma vez que todas têm o mesmo valor para a coluna Name.

Suraj Joshi avatar Suraj Joshi avatar

Suraj Joshi is a backend software engineer at Matrice.ai.

LinkedIn

Artigo relacionado - Pandas DataFrame Row