Obsługa zduplikowanych wartości w Pandas DataFrame

Obsługa zduplikowanych wartości w Pandas DataFrame

Wprowadzenie

Jako analityk danych naszym obowiązkiem jest zapewnienie integralności danych w celu uzyskania dokładnych i wiarygodnych spostrzeżeń. Czyszczenie danych odgrywa kluczową rolę w tym procesie, a zduplikowane wartości należą do najczęstszych problemów, z jakimi spotykają się analitycy danych. Zduplikowane wartości mogą potencjalnie błędnie przedstawiać spostrzeżenia. Dlatego tak ważne jest posiadanie skutecznych metod radzenia sobie ze zduplikowanymi wartościami. W tym artykule dowiemy się, jak identyfikować i obsługiwać zduplikowane wartości, a także najlepsze praktyki zarządzania duplikatami.

Identyfikowanie zduplikowanych wartości

Pierwszym krokiem w obsłudze zduplikowanych wartości jest ich identyfikacja. Identyfikacja zduplikowanych wartości jest ważnym krokiem w czyszczeniu danych. Pandas oferuje wiele metod identyfikacji zduplikowanych wartości w ramce danych. W tej części omówimy duplicated() funkcja i value_counts() funkcja do identyfikowania zduplikowanych wartości.

Usin zduplikowane()

Połączenia duplicated() function to funkcja biblioteki Pandas, która sprawdza zduplikowane wiersze w DataFrame. Wyjście duplicated() jest szeregiem boolowskim o tej samej długości co wejściowa ramka DataFrame, gdzie każdy element wskazuje, czy odpowiedni wiersz jest duplikatem.

Rozważmy prosty przykład tzw duplicated() funkcjonować:

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)

Wyjście:

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

W powyższym przykładzie utworzyliśmy ramkę DataFrame zawierającą nazwiska uczniów i ich łączne wyniki. wezwaliśmy duplicated() na DataFrame, która wygenerowała serię logiczną z False reprezentujących unikalne wartości i True reprezentujących zduplikowane wartości.

W tym przykładzie pierwsze wystąpienie wartości jest uważane za unikatowe. Co jednak, jeśli chcemy, aby ostatnia wartość była uważana za unikalną, a nie chcemy uwzględniać wszystkich kolumn podczas identyfikowania zduplikowanych wartości? Tutaj możemy zmodyfikować plik duplicated() funkcję poprzez zmianę wartości parametrów.

Parametry: Podzbiór i Zachowaj

Połączenia duplicated() Funkcja oferuje opcje dostosowywania za pomocą opcjonalnych parametrów. Ma dwa parametry, jak opisano poniżej:

  • subset: Ten parametr umożliwia nam określenie podzbioru kolumn do uwzględnienia podczas wykrywania duplikatów. Podzbiór jest ustawiony na None domyślnie, co oznacza, że ​​uwzględniana jest każda kolumna w DataFrame. Aby określić nazwy kolumn, możemy udostępnić podzbiór z listą nazw kolumn.

    Oto przykład użycia parametru podzbioru:

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

    Wyjście:

    0 False
    1 False
    2 False
    3 False
    4 False
    5 True
    dtype: bool
    
  • keep: Ta opcja pozwala nam wybrać, które wystąpienie zduplikowanego wiersza ma być oznaczone jako duplikat. Możliwe wartości dla keep to:

    • "first": Jest to domyślna wartość dla keep opcja. Identyfikuje wszystkie duplikaty z wyjątkiem pierwszego wystąpienia, uznając pierwszą wartość za unikalną.
    • "last": Ta opcja identyfikuje ostatnie wystąpienie jako unikalną wartość. Wszystkie inne wystąpienia będą traktowane jako duplikaty.
    • False: Ta opcja oznacza każdą instancję jako zduplikowaną wartość.

Oto przykład użycia keep parametr:


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

Wyjście:

0 True
1 False
2 False
3 False
4 False
5 False
dtype: bool
Wizualizuj zduplikowane wartości

Połączenia value_counts() funkcja to drugie podejście do identyfikowania duplikatów. The value_counts() funkcja zlicza, ile razy każda unikatowa wartość pojawia się w kolumnie. Stosując ww value_counts() funkcji do określonej kolumny, można zwizualizować częstotliwość każdej wartości.

Oto przykład użycia value_counts() funkcjonować:

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)

Wyjście:

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

Zwizualizujmy teraz zduplikowane wartości za pomocą wykresu słupkowego. Częstotliwość powielania się wartości możemy skutecznie zwizualizować za pomocą wykresu słupkowego.


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

zduplikowane wartości

Obsługa zduplikowanych wartości

Po zidentyfikowaniu zduplikowanych wartości nadszedł czas, aby się nimi zająć. W tej sekcji przyjrzymy się różnym strategiom usuwania i aktualizowania zduplikowanych wartości za pomocą pand drop_duplicates() i replace() Funkcje. Dodatkowo omówimy agregowanie danych ze zduplikowanymi wartościami przy użyciu metody groupby() funkcja.

Usuwanie zduplikowanych wartości

Najczęstszym podejściem do obsługi duplikatów jest usunięcie ich z DataFrame. Aby wyeliminować zduplikowane rekordy z DataFrame, użyjemy drop_duplicates() funkcjonować. Domyślnie ta funkcja zachowuje pierwsze wystąpienie każdego zduplikowanego wiersza i usuwa kolejne wystąpienia. Identyfikuje zduplikowane wartości na podstawie wartości wszystkich kolumn; możemy jednak określić kolumnę, która ma być brana pod uwagę, za pomocą parametrów podzbioru.

Składnia drop_duplicates() z wartościami domyślnymi w parametrach wygląda następująco:

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

Połączenia subset i keep parametry mają takie samo wyjaśnienie jak w duplicates(). Jeśli ustawimy trzeci parametr inplace do True, wszystkie modyfikacje zostaną wykonane bezpośrednio na oryginalnej ramce DataFrame, co spowoduje zwrócenie metody None a oryginalna ramka DataFrame jest modyfikowana. Domyślnie, inplace is False.

Oto przykład tzw drop_duplicates() funkcjonować:


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

Wyjście:

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

Zapoznaj się z naszym praktycznym, praktycznym przewodnikiem dotyczącym nauki Git, zawierającym najlepsze praktyki, standardy przyjęte w branży i dołączoną ściągawkę. Zatrzymaj polecenia Google Git, a właściwie uczyć się to!

W powyższym przykładzie pierwszy wpis został usunięty, ponieważ był duplikatem.

Zastąp lub zaktualizuj zduplikowane wartości

Druga metoda obsługi duplikatów polega na zastąpieniu wartości przy użyciu metody Pandas replace() funkcjonować. The replace() Funkcja pozwala nam zastąpić określone wartości lub wzorce w DataFrame nowymi wartościami. Domyślnie zastępuje wszystkie wystąpienia wartości. Jednak za pomocą parametru limit możemy ograniczyć liczbę podmian.

Oto przykład użycia replace() funkcjonować:


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

Wyjście:

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

Tutaj limit został użyty do zastąpienia pierwszej wartości. Co jeśli chcemy zastąpić ostatnie wystąpienie? W takim przypadku połączymy duplicated() i replace() Funkcje. Za pomocą duplicated(), wskażemy ostatnią instancję każdej zduplikowanej wartości, uzyskamy numer wiersza za pomocą loc funkcję, a następnie zastąpić ją za pomocą replace() funkcjonować. Oto przykład użycia duplicated() i replace() funkcje razem.


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)

Wyjście:

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

Funkcje niestandardowe dla złożonych zamian

W niektórych przypadkach obsługa zduplikowanych wartości wymaga bardziej skomplikowanych zamian niż zwykłe ich usuwanie lub aktualizowanie. Niestandardowe funkcje umożliwiają nam tworzenie konkretnych reguł zastępczych dostosowanych do naszych potrzeb. Za pomocą pand apply() funkcji, możemy zastosować funkcję niestandardową do naszych danych.

Załóżmy na przykład, że kolumna „StudentName” zawiera zduplikowane nazwiska. Naszym celem jest zastąpienie duplikatów za pomocą niestandardowej funkcji, która dodaje liczbę na końcu zduplikowanych wartości, czyniąc je niepowtarzalnymi.


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)

Wyjście:

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

Agreguj dane ze zduplikowanymi wartościami

Dane zawierające zduplikowane wartości można agregować w celu podsumowania i uzyskania wglądu w dane. Pandy groupby() Funkcja umożliwia agregowanie danych ze zduplikowanymi wartościami. za pomocą groupby() funkcji, możesz pogrupować jedną lub więcej kolumn i obliczyć średnią, medianę lub sumę innej kolumny dla każdej grupy.

Oto przykład użycia groupby() metoda:


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

Wyjście:

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

zaawansowane techniki

Aby obsłużyć bardziej złożone scenariusze i zapewnić dokładną analizę, istnieje kilka zaawansowanych technik, których możemy użyć. W tej sekcji omówiono postępowanie z rozmytymi duplikatami, duplikacjami w danych szeregów czasowych i zduplikowanymi wartościami indeksu.

rozmyte duplikatów

Duplikaty rozmyte to rekordy, które nie są dokładnymi dopasowaniami, ale są podobne i mogą wystąpić z różnych powodów, w tym błędów we wprowadzaniu danych, literówek i różnic w formatowaniu. Będziemy korzystać z fuzzywuzzy Biblioteka Pythona do identyfikowania duplikatów za pomocą dopasowywania podobieństw ciągów.

Oto przykład obsługi wartości rozmytych:

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

W tym przykładzie tworzymy funkcję niestandardową find_fuzzy_duplicates który przyjmuje DataFrame, nazwę kolumny i próg podobieństwa jako dane wejściowe. Funkcja iteruje przez każdy wiersz w DataFrame i porównuje go z kolejnymi wierszami przy użyciu fuzz.ratio metoda z fuzzywuzzy biblioteka. Jeśli wynik podobieństwa jest większy lub równy wartości progowej, zduplikowane wiersze są dodawane do listy. Na koniec funkcja zwraca DataFrame zawierającą rozmyte duplikaty.

Wyjście:

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

W powyższym przykładzie rozmyte duplikaty są identyfikowane w kolumnie „StudentName”. Funkcja „find_fuzzy_duplicates” porównuje każdą parę łańcuchów przy użyciu metody fuzzywuzzy biblioteki fuzz.ratio funkcja, która oblicza wynik podobieństwa na podstawie odległości Levenshteina. Ustawiliśmy próg na 70, co oznacza, że ​​każda nazwa ze współczynnikiem dopasowania większym niż 70 będzie uważana za wartość rozmytą. Po zidentyfikowaniu wartości rozmytych możemy nimi zarządzać, korzystając z metody opisanej w sekcji „Postępowanie z duplikatami”.

Obsługa duplikatów danych szeregów czasowych

Duplikaty mogą wystąpić, gdy wiele obserwacji jest rejestrowanych w tym samym znaczniku czasu. Te wartości mogą prowadzić do zniekształconych wyników, jeśli nie są odpowiednio obsługiwane. Oto kilka sposobów obsługi zduplikowanych wartości w danych szeregów czasowych.

  • Upuszczanie dokładnych duplikatów: W tej metodzie usuwamy identyczne wiersze za pomocą drop_duplicates działa w Pandach.
  • Zduplikowane znaczniki czasu z różnymi wartościami: Jeśli mamy ten sam znacznik czasu, ale różne wartości, możemy zagregować dane i uzyskać lepszy wgląd za pomocą groupby()lub możemy wybrać najnowszą wartość i usunąć inne używające drop_duplicates() z keep parametr ustawiony na „ostatni”.

Obsługa zduplikowanych wartości indeksu

Zanim zajmiemy się zduplikowanymi wartościami indeksu, najpierw zdefiniujmy, czym jest indeks w Pandas. Indeks to unikalny identyfikator przypisany do każdego wiersza DataFrame. Pandas domyślnie przypisuje indeks numeryczny zaczynający się od zera. Jednak indeks można przypisać do dowolnej kolumny lub kombinacji kolumn. Aby zidentyfikować duplikaty w kolumnie Indeks, możemy użyć metody duplicated() i drop_duplicates() odpowiednio funkcje. W tej sekcji zbadamy, jak obsługiwać duplikaty w kolumnie Index za pomocą reset_index().

Jak sama nazwa wskazuje, plik reset_index() funkcja w Pandas służy do resetowania indeksu DataFrame. Podczas stosowania reset_index() funkcji bieżący indeks jest automatycznie odrzucany, co oznacza utratę początkowych wartości indeksu. Określając drop parametr jako False reset_index() funkcji, możemy zachować pierwotną wartość indeksu podczas resetowania indeksu.

Oto przykład użycia 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)

Wyjście:

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

Najlepsze praktyki

  • Zrozum naturę zduplikowanych danych: Przed podjęciem jakichkolwiek działań należy zrozumieć, dlaczego istnieją zduplikowane wartości i co reprezentują. Zidentyfikuj pierwotną przyczynę, a następnie określ odpowiednie kroki, aby sobie z nimi poradzić.

  • Wybierz odpowiednią metodę obsługi duplikatów: Jak omówiono w poprzednich sekcjach, istnieje wiele sposobów obsługi duplikatów. Wybrana metoda zależy od charakteru danych i analizy, którą chcesz przeprowadzić.

  • Udokumentuj podejście: Niezbędne jest udokumentowanie procesu wykrywania zduplikowanych wartości i zajmowania się nimi, aby umożliwić innym zrozumienie procesu myślowego.

  • Należy zachować ostrożność: Za każdym razem, gdy usuwamy lub modyfikujemy dane, musimy upewnić się, że wyeliminowanie duplikatów nie spowoduje błędów ani stronniczości w analizie. Przeprowadzaj testy poczytalności i weryfikuj wyniki każdego działania.

  • Zachowaj oryginalne dane: Przed wykonaniem jakiejkolwiek operacji na danych utwórz kopię zapasową oryginalnych danych.

  • Zapobiegaj duplikatom w przyszłości: Wdrożenie środków zapobiegających powstawaniu duplikatów w przyszłości. Może to obejmować sprawdzanie poprawności danych podczas wprowadzania danych, procedury czyszczenia danych lub ograniczenia bazy danych w celu wymuszenia unikalności.

Final Thoughts

W analizie danych adresowanie zduplikowanych wartości jest kluczowym krokiem. Zduplikowane wartości mogą prowadzić do niedokładnych wyników. Skutecznie identyfikując zduplikowane wartości i zarządzając nimi, analitycy danych mogą uzyskiwać precyzyjne i istotne informacje. Wdrożenie wspomnianych technik i przestrzeganie najlepszych praktyk umożliwi analitykom zachowanie integralności danych i wydobycie z nich cennych spostrzeżeń.

Znak czasu:

Więcej z Nadużycie stosu