Pandy: jak porównać ciągi między dwiema kolumnami


Możesz użyć następującej podstawowej składni, aby porównać ciągi między dwiema kolumnami w ramce DataFrame pandy:

 df[' col1 ']. str . strip (). str . lower () == df[' col2 ']. str . strip (). str . lower ()

Funkcja str.strip() usuwa spacje z każdego łańcucha, a funkcja str.lower() konwertuje każdy ciąg znaków na małe litery przed wykonaniem porównania.

Poniższy przykład pokazuje, jak zastosować tę składnię w praktyce.

Przykład: porównanie ciągów między dwiema kolumnami w Pandach

Załóżmy, że mamy następującą ramkę danych pand zawierającą dwie kolumny z nazwami drużyn koszykówki:

 import pandas as pd

#createDataFrame
df = pd. DataFrame ({' team1 ': ['Mavs', 'Hawks', 'Nets', 'Hornets', 'Lakers'],
                   ' team2 ': ['Mavs', 'Jazz', 'Nets', 'Hornets', 'LAKERS']})

#view DataFrame
print (df)

     team1 team2
0 Mavs Mavs 
1 Hawks Jazz
2 Nets Nets
3 Hornets Hornets 
4 Lakers LAKERS

Należy pamiętać, że nazwy niektórych drużyn zawierają spacje w przypadkowych miejscach, a nazwy niektórych drużyn są pisane wielką literą.

Załóżmy, że chcemy porównać ciągi w każdym wierszu, aby sprawdzić, czy nazwy drużyn są takie same w każdym wierszu.

Jeśli podczas porównywania ciągów użyjemy tylko symbolu == , pandy zwrócą True tylko wtedy, gdy występują w tej samej wielkości liter i zawierają spacje w dokładnie tych samych pozycjach:

 #create new column that tests if strings in team columns are equal
df[' equal '] = df[' team1 '] == df[' team2 ']

#view updated DataFrame
print (df)

     team1 team2 equal
0 Mavs Mavs False
1 Hawks Jazz False
2 Nets Nets True
3 Hornets Hornets False
4 Lakers LAKERS False

Należy zauważyć, że tylko jedna linia zwraca True , ponieważ jest to jedyna linia, w której ciągi znaków zawierają te same wielkości liter i białe znaki.

Możemy jednak użyć funkcji str.strip() do usunięcia spacji z każdego łańcucha oraz funkcji str.lower() do konwersji każdego ciągu na małe litery przed wykonaniem porównania:

 #remove whitespace and convert each string to lowercase, then compare strings
df[' equal '] = df[' team1 ']. str . strip (). str . lower () == df[' team2 ']. str . strip (). str . lower ()

#view updated DataFrame
print (df)

     team1 team2 equal
0 Mavs Mavs True
1 Hawks Jazz False
2 Nets Nets True
3 Hornets Hornets True
4 Lakers LAKERS True

Teraz każda linia zwraca True, z wyjątkiem linii, w której nazwy zespołów to „Jastrzębie” i „Jazz”, ponieważ nawet po usunięciu spacji i zamianie ciągów na małe litery, ciągi te nie są równe.

Dodatkowe zasoby

Poniższe samouczki wyjaśniają, jak wykonywać inne typowe zadania w pandach:

Pandy: Jak usunąć określone znaki z ciągów znaków
Pandy: Sprawdź, czy ciąg zawiera wiele podciągów
Pandy: Jak zastąpić puste ciągi znaków NaN

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *