Gestione di valori duplicati in un dataframe Pandas

Gestione di valori duplicati in un dataframe Pandas

Introduzione

In qualità di analista di dati, è nostra responsabilità garantire l'integrità dei dati per ottenere informazioni accurate e affidabili. La pulizia dei dati gioca un ruolo fondamentale in questo processo e i valori duplicati sono tra i problemi più comuni riscontrati dagli analisti di dati. I valori duplicati possono potenzialmente rappresentare in modo errato le informazioni dettagliate. Pertanto, è fondamentale disporre di metodi efficienti per gestire i valori duplicati. In questo articolo impareremo come identificare e gestire i valori duplicati, nonché le best practice per la gestione dei duplicati.

Identificazione di valori duplicati

Il primo passaggio nella gestione dei valori duplicati consiste nell'identificarli. L'identificazione dei valori duplicati è un passaggio importante nella pulizia dei dati. Pandas offre diversi metodi per identificare i valori duplicati all'interno di un dataframe. In questa sezione, discuteremo di duplicated() funzione e value_counts() funzione per identificare i valori duplicati.

usin duplicato()

I duplicated() function è una funzione della libreria Pandas che verifica la presenza di righe duplicate in un DataFrame. L'uscita del duplicated() La funzione è una serie booleana con la stessa lunghezza del DataFrame di input, dove ogni elemento indica se la riga corrispondente è o meno un duplicato.

Consideriamo un semplice esempio di duplicated() funzione:

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)

Produzione:

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

Nell'esempio sopra, abbiamo creato un DataFrame contenente i nomi degli studenti e i loro punteggi totali. Abbiamo invocato duplicated() sul DataFrame, che ha generato una serie booleana con False che rappresentano valori unici e True che rappresentano valori duplicati.

In questo esempio, la prima occorrenza del valore è considerata univoca. Tuttavia, cosa succede se vogliamo che l'ultimo valore sia considerato univoco e non vogliamo considerare tutte le colonne quando identifichiamo i valori duplicati? Qui possiamo modificare il file duplicated() funzione modificando i valori dei parametri.

Parametri: Sottoinsieme e Mantieni

I duplicated() La funzione offre opzioni di personalizzazione attraverso i suoi parametri opzionali. Ha due parametri, come descritto di seguito:

  • subset: questo parametro ci consente di specificare il sottoinsieme di colonne da considerare durante il rilevamento dei duplicati. Il sottoinsieme è impostato su None per impostazione predefinita, il che significa che viene considerata ogni colonna nel DataFrame. Per specificare i nomi delle colonne, possiamo fornire al sottoinsieme un elenco di nomi di colonne.

    Ecco un esempio di utilizzo del parametro subset:

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

    Produzione:

    0 False
    1 False
    2 False
    3 False
    4 False
    5 True
    dtype: bool
    
  • keep: Questa opzione ci consente di scegliere quale istanza della riga duplicata deve essere contrassegnata come duplicata. I valori possibili per keep sono:

    • "first": Questo è il valore predefinito per il keep opzione. Identifica tutti i duplicati tranne la prima occorrenza, considerando unico il primo valore.
    • "last": Questa opzione identifica l'ultima occorrenza come valore univoco. Tutte le altre occorrenze saranno considerate duplicati.
    • False: questa opzione etichetta ogni istanza come valore duplicato.

Ecco un esempio di utilizzo di keep parametro:


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

Produzione:

0 True
1 False
2 False
3 False
4 False
5 False
dtype: bool
Visualizza valori duplicati

I value_counts() function è il secondo approccio per identificare i duplicati. IL value_counts() La funzione conta il numero di volte in cui ciascun valore univoco appare in una colonna. Applicando il value_counts() funzione a una colonna specifica, è possibile visualizzare la frequenza di ciascun valore.

Ecco un esempio di utilizzo di value_counts() funzione:

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)

Produzione:

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

Visualizziamo ora i valori duplicati con un grafico a barre. Possiamo visualizzare efficacemente la frequenza dei valori duplicati utilizzando un grafico a barre.


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

valori duplicati

Gestione di valori duplicati

Dopo aver identificato i valori duplicati, è il momento di affrontarli. In questa sezione, esploreremo varie strategie per rimuovere e aggiornare i valori duplicati utilizzando i panda drop_duplicates() ed replace() funzioni. Inoltre, discuteremo l'aggregazione dei dati con valori duplicati utilizzando l' groupby() funzione.

Rimozione di valori duplicati

L'approccio più comune per la gestione dei duplicati consiste nel rimuoverli dal DataFrame. Per eliminare i record duplicati dal DataFrame, utilizzeremo il file drop_duplicates() funzione. Per impostazione predefinita, questa funzione mantiene la prima istanza di ogni riga duplicata e rimuove le occorrenze successive. Identifica i valori duplicati in base a tutti i valori di colonna; tuttavia, possiamo specificare la colonna da considerare utilizzando i parametri del sottoinsieme.

Sintassi di drop_duplicates() con i valori predefiniti nei parametri è il seguente:

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

I subset ed keep i parametri hanno la stessa spiegazione di duplicates(). Se impostiamo il terzo parametro inplace a True, tutte le modifiche verranno eseguite direttamente sul DataFrame originale, determinando la restituzione del metodo None e il DataFrame originale in fase di modifica. Per impostazione predefinita, inplace is False.

Ecco un esempio di drop_duplicates() funzione:


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

Produzione:

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

Dai un'occhiata alla nostra guida pratica e pratica per l'apprendimento di Git, con le migliori pratiche, gli standard accettati dal settore e il cheat sheet incluso. Smetti di cercare su Google i comandi Git e in realtà imparare esso!

Nell'esempio precedente, la prima voce è stata eliminata poiché era un duplicato.

Sostituisci o aggiorna i valori duplicati

Il secondo metodo per la gestione dei duplicati prevede la sostituzione del valore utilizzando i Panda replace() funzione. Il replace() La funzione ci consente di sostituire valori o modelli specifici in un DataFrame con nuovi valori. Per impostazione predefinita, sostituisce tutte le istanze del valore. Tuttavia, utilizzando il parametro limite, possiamo limitare il numero di sostituzioni.

Ecco un esempio di utilizzo di replace() funzione:


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

Produzione:

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

Qui, il limite è stato utilizzato per sostituire il primo valore. E se volessimo sostituire l'ultima occorrenza? In questo caso, combineremo il duplicated() ed replace() funzioni. Usando duplicated(), indicheremo l'ultima istanza di ogni valore duplicato, otterremo il numero di riga utilizzando il loc funzione, quindi sostituirla utilizzando il replace() funzione. Ecco un esempio di utilizzo duplicated() ed replace() funzioni insieme.


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)

Produzione:

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

Funzioni personalizzate per sostituzioni complesse

In alcuni casi, la gestione di valori duplicati richiede sostituzioni più complesse rispetto alla semplice rimozione o aggiornamento. Le funzioni personalizzate ci consentono di creare regole di sostituzione specifiche su misura per le nostre esigenze. Usando i panda apply() funzione, possiamo applicare la funzione personalizzata ai nostri dati.

Ad esempio, supponiamo che la colonna "StudentName" contenga nomi duplicati. Il nostro obiettivo è sostituire i duplicati utilizzando una funzione personalizzata che aggiunge un numero alla fine dei valori duplicati, rendendoli univoci.


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)

Produzione:

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

Dati aggregati con valori duplicati

I dati contenenti valori duplicati possono essere aggregati per riepilogare e ottenere informazioni dettagliate dai dati. I Panda groupby() La funzione consente di aggregare i dati con valori duplicati. Utilizzando il groupby() funzione, è possibile raggruppare una o più colonne e calcolare la media, la mediana o la somma di un'altra colonna per ogni gruppo.

Ecco un esempio di utilizzo di groupby() Metodo:


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

Produzione:

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

Tecniche avanzate

Per gestire scenari più complessi e garantire un'analisi accurata, esistono alcune tecniche avanzate che possiamo utilizzare. Questa sezione discuterà la gestione dei duplicati fuzzy, la duplicazione nei dati delle serie temporali e i valori di indice duplicati.

Duplicati Fuzzy

I duplicati sfocati sono record che non sono corrispondenze esatte ma sono simili e possono verificarsi per vari motivi, inclusi errori di immissione dei dati, errori di ortografia e variazioni nella formattazione. Useremo il fuzzywuzzy Libreria Python per identificare i duplicati utilizzando la corrispondenza di somiglianza delle stringhe.

Ecco un esempio di gestione dei valori fuzzy:

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))

In questo esempio, creiamo una funzione personalizzata find_fuzzy_duplicates che accetta un DataFrame, un nome di colonna e una soglia di somiglianza come input. La funzione scorre ogni riga nel DataFrame e la confronta con le righe successive utilizzando il fuzz.ratio metodo dal fuzzywuzzy biblioteca. Se il punteggio di somiglianza è maggiore o uguale alla soglia, le righe duplicate vengono aggiunte a un elenco. Infine, la funzione restituisce un DataFrame contenente i duplicati fuzzy.

Produzione:

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

Nell'esempio precedente, i duplicati fuzzy sono identificati nella colonna "StudentName". La funzione 'find_fuzzy_duplicates' confronta ogni coppia di stringhe usando il file fuzzywuzzy della biblioteca fuzz.ratio funzione, che calcola un punteggio di somiglianza basato sulla distanza di Levenshtein. Abbiamo impostato la soglia a 70, il che significa che qualsiasi nome con un rapporto di corrispondenza maggiore di 70 sarà considerato un valore fuzzy. Dopo aver identificato i valori fuzzy, possiamo gestirli utilizzando il metodo descritto nella sezione intitolata "Gestione dei duplicati".

Gestione dei duplicati di dati delle serie storiche

I duplicati possono verificarsi quando più osservazioni vengono registrate con lo stesso timestamp. Questi valori possono portare a risultati distorti se non gestiti correttamente. Ecco alcuni modi per gestire i valori duplicati nei dati delle serie temporali.

  • Eliminazione di duplicati esatti: In questo metodo, rimuoviamo righe identiche utilizzando il drop_duplicates funzione in Panda.
  • Timestamp duplicati con valori diversi: se abbiamo lo stesso timestamp ma valori diversi, possiamo aggregare i dati e ottenere maggiori informazioni utilizzando groupby(), oppure possiamo selezionare il valore più recente e rimuovere gli altri utilizzando drop_duplicates() con la keep parametro impostato su 'ultimo'.

Gestione di valori di indice duplicati

Prima di affrontare i valori di indice duplicati, definiamo innanzitutto cos'è un indice in Pandas. Un indice è un identificatore univoco assegnato a ciascuna riga del DataFrame. Pandas assegna un indice numerico a partire da zero per impostazione predefinita. Tuttavia, un indice può essere assegnato a qualsiasi colonna o combinazione di colonne. Per identificare i duplicati nella colonna Indice, possiamo utilizzare il file duplicated() ed drop_duplicates() funzioni, rispettivamente. In questa sezione, esploreremo come gestire i duplicati nella colonna Index utilizzando reset_index().

Come suggerisce il nome, il reset_index() La funzione in Pandas viene utilizzata per reimpostare l'indice di un DataFrame. Quando si applica il reset_index() funzione, l'indice corrente viene automaticamente scartato, il che significa che i valori iniziali dell'indice vengono persi. Specificando il drop parametro come False nel reset_index() funzione, possiamo mantenere il valore dell'indice originale durante il ripristino dell'indice.

Ecco un esempio di utilizzo 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)

Produzione:

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

Best Practices

  • Comprendi la natura dei dati duplicati: Prima di intraprendere qualsiasi azione, è fondamentale comprendere perché esistono valori duplicati e cosa rappresentano. Identificare la causa principale e quindi determinare i passaggi appropriati per gestirli.

  • Seleziona un metodo appropriato per la gestione dei duplicati: Come discusso nelle sezioni precedenti, esistono diversi modi per gestire i duplicati. Il metodo scelto dipende dalla natura dei dati e dall'analisi che intendi eseguire.

  • Documentare l'approccio: È fondamentale documentare il processo per rilevare i valori duplicati e affrontarli, consentendo agli altri di comprendere il processo di pensiero.

  • Attenzione all'esercizio: Ogni volta che rimuoviamo o modifichiamo i dati, dobbiamo assicurarci che l'eliminazione dei duplicati non introduca errori o distorsioni nell'analisi. Condurre test di sanità mentale e convalidare i risultati di ogni azione.

  • Conservare i dati originali: Prima di eseguire qualsiasi operazione sui dati, creare una copia di backup dei dati originali.

  • Prevenire futuri duplicati: Attuare misure per evitare che si verifichino duplicati in futuro. Ciò può includere la convalida dei dati durante l'immissione dei dati, le routine di pulizia dei dati o i vincoli del database per rafforzare l'univocità.

Considerazioni finali

Nell'analisi dei dati, affrontare i valori duplicati è un passaggio cruciale. I valori duplicati possono portare a risultati imprecisi. Identificando e gestendo i valori duplicati in modo efficiente, gli analisti dei dati possono ricavare informazioni precise e significative. L'implementazione delle tecniche menzionate e il rispetto delle migliori pratiche consentiranno agli analisti di preservare l'integrità dei propri dati e di estrarne preziose informazioni.

Timestamp:

Di più da Impilamento