Manipulando valores duplicados em um Pandas DataFrame

Manipulando valores duplicados em um Pandas DataFrame

Introdução

Como analista de dados, é nossa responsabilidade garantir a integridade dos dados para obter insights precisos e confiáveis. A limpeza de dados desempenha um papel vital nesse processo, e os valores duplicados estão entre os problemas mais comuns encontrados pelos analistas de dados. Valores duplicados podem potencialmente deturpar insights. Portanto, é crucial ter métodos eficientes para lidar com valores duplicados. Neste artigo, aprenderemos como identificar e lidar com valores duplicados, bem como as práticas recomendadas para gerenciar duplicatas.

Identificando Valores Duplicados

A primeira etapa no tratamento de valores duplicados é identificá-los. A identificação de valores duplicados é uma etapa importante na limpeza de dados. O Pandas oferece vários métodos para identificar valores duplicados em um dataframe. Nesta seção, discutiremos os duplicated() função e value_counts() função para identificar valores duplicados.

Usin duplicado()

A duplicated() function é uma função de biblioteca do Pandas que verifica linhas duplicadas em um DataFrame. A saída do duplicated() A função é uma série booleana com o mesmo comprimento que o DataFrame de entrada, onde cada elemento indica se a linha correspondente é ou não uma duplicata.

Vamos considerar um exemplo simples do duplicated() função:

import pandas as pd data = { 'StudentName': ['Mark', 'Ali', 'Bob', 'John', 'Johny', 'Mark'], 'Score': [45, 65, 76, 44, 39, 45]
}
df = pd.DataFrame(data) df_duplicates = df.duplicated()
print(df_duplicates)

Saída:

0 False
1 False
2 False
3 False
4 False
5 True
dtype: bool

No exemplo acima, criamos um DataFrame contendo os nomes dos alunos e suas pontuações totais. nós invocamos duplicated() no DataFrame, que gerou uma série booleana com False representando valores únicos e True representando valores duplicados.

Neste exemplo, a primeira ocorrência do valor é considerada única. No entanto, e se quisermos que o último valor seja considerado único e não quisermos considerar todas as colunas ao identificar valores duplicados? Aqui, podemos modificar o duplicated() função alterando os valores dos parâmetros.

Parâmetros: subconjunto e manter

A duplicated() A função oferece opções de personalização por meio de seus parâmetros opcionais. Possui dois parâmetros, conforme descrito a seguir:

  • subset: este parâmetro nos permite especificar o subconjunto de colunas a serem consideradas durante a detecção de duplicatas. O subconjunto é definido como None por padrão, o que significa que cada coluna no DataFrame é considerada. Para especificar nomes de colunas, podemos fornecer ao subconjunto uma lista de nomes de colunas.

    Aqui está um exemplo de uso do parâmetro subconjunto:

    
    df_duplicates = df.duplicated(subset=['StudentName'])
    

    Saída:

    0 False
    1 False
    2 False
    3 False
    4 False
    5 True
    dtype: bool
    
  • keep: esta opção nos permite escolher qual instância da linha duplicada deve ser marcada como duplicada. Os valores possíveis para manter são:

    • "first": Este é o valor padrão para o keep opção. Identifica todas as duplicatas exceto a primeira ocorrência, considerando o primeiro valor como único.
    • "last": Esta opção identifica a última ocorrência como um valor único. Todas as outras ocorrências serão consideradas duplicatas.
    • False: esta opção rotula cada instância como um valor duplicado.

Aqui está um exemplo de como usar o keep parâmetro:


df_duplicates = df.duplicated(keep='last')
print(df_duplicates)

Saída:

0 True
1 False
2 False
3 False
4 False
5 False
dtype: bool
Visualizar valores duplicados

A value_counts() A função é a segunda abordagem para identificar duplicatas. O value_counts() A função conta o número de vezes que cada valor exclusivo aparece em uma coluna. Aplicando o value_counts() função a uma coluna específica, a frequência de cada valor pode ser visualizada.

Aqui está um exemplo de como usar o value_counts() função:

import matplotlib.pyplot as plt
import pandas as pd data = { 'StudentName': ['Mark', 'Ali', 'Bob', 'John', 'Johny', 'Mark'], 'Score': [45, 65, 76, 44, 39, 45]
}
df = pd.DataFrame(data) name_counts = df['StudentName'].value_counts()
print(name_counts)

Saída:

Mark 2
Ali 1
Bob 1
John 1
Johny 1
Name: StudentName, dtype: int64

Vamos agora visualizar valores duplicados com um gráfico de barras. Podemos visualizar efetivamente a frequência de valores duplicados usando um gráfico de barras.


name_counts.plot(kind='bar')
plt.xlabel('Student Name')
plt.ylabel('Frequency')
plt.title('Duplicate Name Frequencies')
plt.show()

valores duplicados

Manipulando Valores Duplicados

Depois de identificar valores duplicados, é hora de resolvê-los. Nesta seção, exploraremos várias estratégias para remover e atualizar valores duplicados usando os pandas drop_duplicates() e replace() funções. Além disso, discutiremos a agregação de dados com valores duplicados usando o groupby() função.

Removendo Valores Duplicados

A abordagem mais comum para lidar com duplicatas é removê-las do DataFrame. Para eliminar registros duplicados do DataFrame, usaremos o drop_duplicates() função. Por padrão, esta função mantém a primeira instância de cada linha duplicada e remove as ocorrências subsequentes. Ele identifica valores duplicados com base em todos os valores de coluna; no entanto, podemos especificar a coluna a ser considerada usando parâmetros de subconjunto.

Sintaxe de drop_duplicates() com valores padrão nos parâmetros é o seguinte:

dataFrame.drop_duplicates(subset=None, keep='first', inplace=False)

A subset e keep parâmetros têm a mesma explicação que em duplicates(). Se definirmos o terceiro parâmetro inplace para True, todas as modificações serão realizadas diretamente no DataFrame original, resultando no retorno do método None e o DataFrame original sendo modificado. Por padrão, inplace is False.

Aqui está um exemplo do drop_duplicates() função:


df.drop_duplicates(keep='last', inplace=True)
print(df)

Saída:

 StudentName Score
1 Ali 65
2 Bob 76
3 John 44
4 Johny 39
5 Mark 45

Confira nosso guia prático e prático para aprender Git, com práticas recomendadas, padrões aceitos pelo setor e folha de dicas incluída. Pare de pesquisar comandos Git no Google e realmente aprender -lo!

No exemplo acima, a primeira entrada foi excluída porque era uma duplicata.

Substituir ou atualizar valores duplicados

O segundo método para lidar com duplicatas envolve substituir o valor usando o Pandas replace() função. o replace() A função nos permite substituir valores ou padrões específicos em um DataFrame por novos valores. Por padrão, ele substitui todas as instâncias do valor. No entanto, usando o parâmetro limit, podemos restringir o número de substituições.

Aqui está um exemplo de uso do replace() função:


df['StudentName'].replace('Mark', 'Max', limit=1, inplace=True)
print(df)

Saída:

 StudentName Score
0 Max 45
1 Ali 65
2 Bob 76
3 John 44
4 Johny 39
5 Mark 45

Aqui, o limite foi usado para substituir o primeiro valor. E se quisermos substituir a última ocorrência? Neste caso, combinaremos o duplicated() e replace() funções. Usando duplicated(), indicaremos a última instância de cada valor duplicado, obteremos o número da linha usando o loc função e, em seguida, substitua-o usando o replace() função. Aqui está um exemplo de uso duplicated() e replace() funções em conjunto.


last_occurrences = df.duplicated(subset='StudentName', keep='first') last_occurrences_rows = df[last_occurrences] df.loc[last_occurrences, 'StudentName'] = df.loc[last_occurrences, 'StudentName'].replace('Mark', 'Max') print(df)

Saída:

 StudentName Score
0 Mark 45
1 Ali 65
2 Bob 76
3 John 44
4 Johny 39
5 Max 45

Funções personalizadas para substituições complexas

Em alguns casos, lidar com valores duplicados requer substituições mais complicadas do que simplesmente removê-los ou atualizá-los. As funções personalizadas nos permitem criar regras de substituição específicas adaptadas às nossas necessidades. Usando os pandas apply() função, podemos aplicar a função personalizada aos nossos dados.

Por exemplo, suponhamos que a coluna “StudentName” contenha nomes duplicados. Nosso objetivo é substituir as duplicatas usando uma função personalizada que acrescenta um número ao final dos valores duplicados, tornando-os únicos.


def add_number(name, counts): if name in counts: counts[name] += 1 return f'{name}_{counts[name]}' else: counts[name] = 0 return name name_counts = {} df['is_duplicate'] = df.duplicated('StudentName', keep=False)
df['StudentName'] = df.apply(lambda x: add_number(x['StudentName'], name_counts) if x['is_duplicate'] else x['StudentName'], axis=1)
df.drop('is_duplicate', axis=1, inplace=True)
print(df)

Saída:

 StudentName Score
0 Mark 45
1 Ali 65
2 Bob 76
3 John 44
4 Johny 39
5 Mark_1 45

Dados agregados com valores duplicados

Os dados que contêm valores duplicados podem ser agregados para resumir e obter insights dos dados. os pandas groupby() A função permite agregar dados com valores duplicados. Usando o groupby() função, você pode agrupar uma ou mais colunas e calcular a média, mediana ou soma de outra coluna para cada grupo.

Aqui está um exemplo de uso do groupby() método:


grouped = df.groupby(['StudentName']) df_aggregated = grouped.sum()
print(df_aggregated)

Saída:

 Score
StudentName Ali 65
Bob 76
John 44
Johny 39
Mark 90

Técnicas Avançadas

Para lidar com cenários mais complexos e garantir análises precisas, existem algumas técnicas avançadas que podemos usar. Esta seção discutirá como lidar com duplicatas difusas, duplicação em dados de séries temporais e valores de índice duplicados.

duplicados nebulosos

Duplicatas difusas são registros que não são correspondências exatas, mas são semelhantes, e podem ocorrer por vários motivos, incluindo erros de entrada de dados, erros ortográficos e variações na formatação. Nós usaremos o fuzzywuzzy Biblioteca Python para identificar duplicatas usando correspondência de similaridade de string.

Aqui está um exemplo de manipulação de valores difusos:

import pandas as pd
from fuzzywuzzy import fuzz def find_fuzzy_duplicates(dataframe, column, threshold): duplicates = [] for i in range(len(dataframe)): for j in range(i+1, len(dataframe)): similarity = fuzz.ratio(dataframe[column][i], dataframe[column][j]) if similarity >= threshold: duplicates.append(dataframe.iloc[[i, j]]) if duplicates: duplicates_df = pd.concat(duplicates) return duplicates_df else: return pd.DataFrame() data = { 'StudentName': ['Mark', 'Ali', 'Bob', 'John', 'Johny', 'Mark'], 'Score': [45, 65, 76, 44, 39, 45]
}
df = pd.DataFrame(data) threshold = 70 fuzzy_duplicates = find_fuzzy_duplicates(df, 'StudentName', threshold)
print("Fuzzy duplicates:")
print(fuzzy_duplicates.to_string(index=False))

Neste exemplo, criamos uma função personalizada find_fuzzy_duplicates que usa um DataFrame, um nome de coluna e um limite de similaridade como entrada. A função itera através de cada linha no DataFrame e a compara com as linhas subseqüentes usando o método fuzz.ratio método do fuzzywuzzy biblioteca. Se a pontuação de similaridade for maior ou igual ao limite, as linhas duplicadas serão incluídas em uma lista. Por fim, a função retorna um DataFrame contendo as duplicatas difusas.

Saída:

Fuzzy duplicates:
StudentName Score Mark 45 Mark 45 John 44 Johny 39

No exemplo acima, as duplicatas difusas são identificadas na coluna “StudentName”. A função 'find_fuzzy_duplicates' compara cada par de strings usando o fuzzywuzzy da biblioteca fuzz.ratio função, que calcula uma pontuação de similaridade com base na distância de Levenshtein. Definimos o limite em 70, o que significa que qualquer nome com uma proporção de correspondência maior que 70 será considerado um valor difuso. Depois de identificar os valores difusos, podemos gerenciá-los usando o método descrito na seção intitulada “Lidando com duplicatas”.

Manipulando Duplicatas de Dados de Séries Temporais

Duplicatas podem ocorrer quando várias observações são registradas no mesmo carimbo de data/hora. Esses valores podem levar a resultados tendenciosos se não forem tratados adequadamente. Aqui estão algumas maneiras de lidar com valores duplicados em dados de séries temporais.

  • Descartando duplicatas exatas: Neste método, removemos linhas idênticas usando o método drop_duplicates função em Pandas.
  • Timestamps duplicados com valores diferentes: Se tivermos o mesmo carimbo de data/hora, mas valores diferentes, podemos agregar os dados e obter mais informações usando groupby(), ou podemos selecionar o valor mais recente e remover os outros usando drop_duplicates() com o keep parâmetro definido como 'último'.

Manipulando Valores de Índice Duplicados

Antes de abordar valores de índice duplicados, vamos primeiro definir o que é um índice no Pandas. Um índice é um identificador exclusivo atribuído a cada linha do DataFrame. Pandas atribui um índice numérico começando em zero por padrão. No entanto, um índice pode ser atribuído a qualquer coluna ou combinação de colunas. Para identificar duplicatas na coluna Índice, podemos usar o duplicated() e drop_duplicates() funções, respectivamente. Nesta seção, exploraremos como lidar com duplicatas na coluna Índice usando reset_index().

Como o próprio nome indica, o reset_index() A função no Pandas é usada para redefinir o índice de um DataFrame. Ao aplicar o reset_index() função, o índice atual é descartado automaticamente, o que significa que os valores iniciais do índice são perdidos. Ao especificar o drop parâmetro como False no reset_index() função, podemos reter o valor do índice original ao redefinir o índice.

Aqui está um exemplo de uso reset_index():

import pandas as pd data = { 'Score': [45, 65, 76, 44, 39, 45]
}
df = pd.DataFrame(data, index=['Mark', 'Ali', 'Bob', 'John', 'Johny', 'Mark']) df.reset_index(inplace=True)
print(df)

Saída:

 index Score
0 Mark 45
1 Ali 65
2 Bob 76
3 John 44
4 Johny 39
5 Mark 45

Melhores Práticas

  • Entenda a natureza dos dados duplicados: Antes de qualquer ação, é crucial compreender por que existem valores duplicados e o que eles representam. Identifique a causa raiz e determine as etapas apropriadas para lidar com elas.

  • Selecione um método apropriado para lidar com duplicatas: conforme discutido nas seções anteriores, há várias maneiras de lidar com duplicatas. O método escolhido depende da natureza dos dados e da análise que pretende realizar.

  • Documente a Abordagem: É vital documentar o processo para detectar valores duplicados e resolvê-los, permitindo que outros entendam o processo de pensamento.

  • Precaução no exercício: Sempre que removemos ou modificamos dados, devemos garantir que a eliminação de duplicatas não introduza erros ou vieses na análise. Realize testes de sanidade e valide os resultados de cada ação.

  • Preservar os dados originais: Antes de executar qualquer operação nos dados, crie uma cópia de backup dos dados originais.

  • Evite Duplicatas Futuras: Implemente medidas para evitar a ocorrência de duplicatas no futuro. Isso pode incluir validação de dados durante a entrada de dados, rotinas de limpeza de dados ou restrições de banco de dados para impor exclusividade.

Considerações Finais

Na análise de dados, abordar valores duplicados é uma etapa crucial. Valores duplicados podem levar a resultados imprecisos. Ao identificar e gerenciar valores duplicados com eficiência, os analistas de dados podem obter informações precisas e significativas. Implementar as técnicas mencionadas e seguir as melhores práticas permitirá que os analistas preservem a integridade de seus dados e extraiam insights valiosos deles.

Carimbo de hora:

Mais de Abuso de pilha