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