Pandas: как сравнить строки между двумя столбцами
Вы можете использовать следующий базовый синтаксис для сравнения строк между двумя столбцами в DataFrame pandas:
df[' col1 ']. str . strip (). str . lower () == df[' col2 ']. str . strip (). str . lower ()
Функция str.strip() удаляет пробелы из каждой строки, а функция str.lower() преобразует каждую строку в нижний регистр перед выполнением сравнения.
В следующем примере показано, как использовать этот синтаксис на практике.
Пример: сравнение строк между двумя столбцами в Pandas
Допустим, у нас есть следующий DataFrame pandas, который содержит два столбца с названиями баскетбольных команд:
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
Обратите внимание, что названия некоторых команд содержат пробелы в случайных местах, а некоторые названия команд пишутся с заглавной буквы.
Допустим, мы хотим сравнить строки в каждой строке, чтобы увидеть, равны ли названия команд в каждой строке.
Если мы используем символ == при сравнении строк, pandas вернет True только в том случае, если они указаны в одном регистре и содержат пробелы в одних и тех же позициях:
#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
Обратите внимание, что только одна строка возвращает True , поскольку это единственная строка, в которой строки содержат одинаковые позиции регистра и пробелов.
Однако мы можем использовать функцию str.strip() для удаления пробелов из каждой строки и функцию str.lower() для преобразования каждой строки в нижний регистр перед выполнением сравнения:
#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
Теперь каждая строка возвращает True, за исключением строки, в которой названия команд — «Ястребы» и «Джаз», поскольку даже после удаления пробелов и преобразования строк в нижний регистр эти строки не равны.
Дополнительные ресурсы
В следующих руководствах объясняется, как выполнять другие распространенные задачи в pandas:
Pandas: как удалить определенные символы из строк
Pandas: проверьте, содержит ли строка несколько подстрок
Pandas: как заменить пустые строки NaN