Pandas: como comparar strings entre duas colunas
Você pode usar a seguinte sintaxe básica para comparar strings entre duas colunas em um DataFrame do pandas:
df[' col1 ']. str . strip (). str . lower () == df[' col2 ']. str . strip (). str . lower ()
A função str.strip() remove espaços de cada string e a função str.lower() converte cada string em minúsculas antes de realizar a comparação.
O exemplo a seguir mostra como usar essa sintaxe na prática.
Exemplo: compare strings entre duas colunas no Pandas
Digamos que temos o seguinte DataFrame do pandas que contém duas colunas com os nomes dos times de basquete:
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
Observe que alguns nomes de equipes contêm espaços em locais aleatórios e alguns nomes de equipes estão em letras maiúsculas.
Digamos que queremos comparar as strings em cada linha para ver se os nomes dos times são iguais em cada linha.
Se usarmos apenas o símbolo == ao comparar strings, os pandas só retornarão True se estiverem no mesmo caso e contiverem espaços exatamente nas mesmas posições:
#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
Observe que apenas uma linha retorna True , porque é a única linha em que as strings contêm as mesmas posições de maiúsculas e minúsculas e espaços em branco.
No entanto, podemos usar a função str.strip() para remover espaços de cada string e a função str.lower() para converter cada string para minúscula antes de realizar a comparação:
#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
Agora toda linha retorna True exceto a linha onde os nomes dos times são “Hawks” e “Jazz”, pois mesmo após retirar os espaços e converter as strings para minúsculas, essas strings não são iguais.
Recursos adicionais
Os tutoriais a seguir explicam como realizar outras tarefas comuns em pandas:
Pandas: como remover caracteres específicos de strings
Pandas: verifique se a string contém várias substrings
Pandas: Como substituir strings vazias por NaN