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

Додати коментар

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *