Pandas: як порівняти рядки між двома стовпцями
Ви можете використовувати наступний базовий синтаксис для порівняння рядків між двома стовпцями в pandas DataFrame:
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, окрім рядка, у якому назви команд «Hawks» і «Jazz», оскільки навіть після видалення пробілів і перетворення рядків на малі літери ці рядки не є рівними.
Додаткові ресурси
У наступних посібниках пояснюється, як виконувати інші типові завдання в pandas:
Pandas: як видалити певні символи з рядків
Pandas: перевірте, чи рядок містить декілька підрядків
Pandas: Як замінити порожні рядки на NaN