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 comoNone
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 okeep
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()
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 usandodrop_duplicates()
com okeep
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.
- Conteúdo com tecnologia de SEO e distribuição de relações públicas. Seja amplificado hoje.
- EVM Finanças. Interface unificada para finanças descentralizadas. Acesse aqui.
- Grupo de Mídia Quântica. IR/PR Amplificado. Acesse aqui.
- PlatoAiStream. Inteligência de Dados Web3. Conhecimento Amplificado. Acesse aqui.
- Fonte: https://stackabuse.com/handling-duplicate-values-in-a-pandas-dataframe/
- :tem
- :é
- :não
- :onde
- 1
- 11
- 12
- 20
- 70
- 8
- 9
- a
- acima
- preciso
- Açao Social
- adicionado
- Adicionalmente
- endereço
- endereçando
- avançado
- Depois de
- agregando
- visar
- Todos os Produtos
- Permitindo
- permite
- entre
- an
- análise
- analista
- Analistas
- e
- Outro
- qualquer
- aparece
- Aplicar
- Aplicando
- abordagem
- apropriado
- SOMOS
- artigo
- AS
- atribuído
- At
- automaticamente
- backup
- Barra
- baseado
- BE
- antes
- ser
- abaixo
- MELHOR
- melhores práticas
- viés
- tendencioso
- grão
- fronteira
- mas a
- by
- calcular
- calcula
- CAN
- casas
- casos
- Causar
- de cores
- Cheques
- Escolha
- Limpeza
- Coluna
- colunas
- combinação
- combinar
- comum
- integrações
- compreender
- Conduzir
- Considerar
- considerado
- considerando
- restrições
- contém
- Correspondente
- crio
- criado
- crucial
- Atual
- personalizadas
- personalização
- dados,
- análise de dados
- entrada de dados
- banco de dados
- lidar
- Padrão
- depende
- descrito
- Detecção
- Determinar
- diferente
- diretamente
- discutir
- discutido
- distância
- documento
- parece
- don
- duplicatas
- durante
- cada
- efetivamente
- eficiente
- eficientemente
- elemento
- eliminado
- eliminando
- permitir
- permite
- final
- aplicar
- garantir
- entrada
- igual
- erros
- exemplo
- Exceto
- existir
- explicação
- explorar
- extrato
- poucos
- Finalmente
- Primeiro nome
- Foco
- seguinte
- segue
- Escolha
- Frequência
- da
- função
- funções
- futuro
- Ganho
- gerado
- Git
- meta
- gráfico
- maior
- Grupo
- guia
- manipular
- Manipulação
- mãos em
- Ter
- SUA PARTICIPAÇÃO FAZ A DIFERENÇA
- pairar
- Como funciona o dobrador de carta de canal
- Como Negociar
- Contudo
- HTTPS
- i
- idêntico
- identificado
- identificador
- identifica
- identificar
- identificar
- if
- executar
- implementação
- importante
- in
- impreciso
- incluir
- incluído
- Incluindo
- índice
- indicam
- indicam
- INFORMAÇÕES
- do estado inicial,
- entrada
- introspecção
- insights
- instância
- integridade
- para dentro
- introduzir
- Introdução
- invocado
- questões
- IT
- ESTÁ
- banheiro
- Guarda
- Rótulos
- Sobrenome
- conduzir
- APRENDER
- aprendizagem
- Comprimento
- deixar
- LG
- Biblioteca
- LIMITE
- Lista
- perdido
- Fazendo
- gerencia
- gestão
- marca
- marcado
- Match
- correspondente
- matplotlib
- max
- Posso..
- significar
- significado
- significa
- medidas
- mencionado
- método
- métodos
- erros
- modificações
- modificada
- modificar
- mais
- a maioria
- múltiplo
- devo
- nome
- nomes
- Natureza
- Cria
- Novo
- agora
- número
- obter
- ocorrendo
- of
- Oferece
- on
- ONE
- operação
- Opção
- Opções
- or
- original
- Outros
- Outros
- A Nossa
- Fora
- delineado
- saída
- par
- pandas
- parâmetro
- parâmetros
- padrões
- Realizar
- realizada
- realização
- platão
- Inteligência de Dados Platão
- PlatãoData
- desempenha
- possível
- potencialmente
- Prática
- práticas
- preciso
- evitar
- anterior
- processo
- devidamente
- fornecer
- Python
- relação
- razões
- recentemente
- gravado
- registros
- remover
- removendo
- substituir
- substituição
- representar
- representando
- exige
- respectivamente
- responsabilidade
- restringir
- resultando
- Resultados
- reter
- voltar
- Retorna
- Anel
- Tipo
- raiz
- LINHA
- regras
- s
- mesmo
- cenários
- Ponto
- Segundo
- Seção
- seções
- Série
- conjunto
- Shadow
- folha
- rede de apoio social
- periodo
- semelhante
- simples
- simplesmente
- desde
- alguns
- específico
- Abuso de pilha
- padrões
- Comece
- Passo
- Passos
- Dê um basta
- estratégias
- Tanga
- estudante
- Estudantes
- subseqüente
- resumir
- adaptados
- toma
- tomar
- técnicas
- testes
- do que
- que
- A
- O Futuro
- deles
- Eles
- então
- Lá.
- assim sendo
- Este
- deles
- Terceiro
- isto
- pensamento
- limiar
- Através da
- tempo
- Séries temporais
- vezes
- timestamp
- intitulado
- para
- juntos
- Total
- transição
- digno de confiança
- dois
- compreender
- único
- singularidade
- Atualizar
- atualização
- us
- usar
- usava
- utilização
- VALIDAR
- validação
- Valioso
- valor
- Valores
- vário
- Ve
- vital
- queremos
- foi
- maneiras
- we
- BEM
- O Quê
- quando
- sempre que
- se
- qual
- enquanto
- porque
- precisarão
- de
- dentro
- X
- Vocês
- zefirnet
- zero