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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *