comment comparer deux variables de chaîne dans les pandas?
J'ai deux colonnes de la chaîne dans mes Pandas dataset
name1 name2
John Doe John Doe
AleX T Franz K
et j'ai besoin de vérifier si name1
est égal à name2
.
Le naïf façon, j'utilise maintenant est d'utiliser un simple masque de
mask=df.name1==df.name2
Mais le problème est qu'il y a peut être tort de cordes (d'une manière qui n'est pas prévisible - les données sont trop gros) qui empêchent une correspondance exacte à se produire.
Par exemple "John Doe" et "John Doe" ne correspondent pas. Bien sûr, j'ai coupé, écrit en minuscule mes cordes, mais d'autres possibilités.
Une idée serait de regarder si name1
est contenue dans name2
. Mais il semble que je ne peut pas utiliser str.contains
avec une autre variable comme argument. D'autres idées?
Merci beaucoup!
EDIT: à l'aide de isin
permet aux non-sensiques résultats.
Exemple
test = pd.DataFrame({'A': ["john doe", " john doe", 'John'], 'B': [' john doe', 'eddie murphy', 'batman']})
test
Out[6]:
A B
0 john doe john doe
1 john doe eddie murphy
2 John batman
test['A'].isin(test['B'])
Out[7]:
0 False
1 True
2 False
Name: A, dtype: bool
Alors, êtes-vous après quelque chose comme
df['name1'].str.lower() == df['name2'].str.lower()
?pas vraiment, parce que je crois que l'égalité parfaite générer trop de faux négatifs dans les données. vérifier si nom1 figure quelque part dans nom2 semble plus approprié
Je pense que dans ce cas, vous devez
strip
les espaces et lower
le cas, voir ma réponseSi vous avez proposé d'utiliser quelque chose comme
in
alors que vous avez à faire cela à l'aide de apply
comme df.apply(lambda x: x['A'].strip().lower() in x['B'].strip().lower(), axis=1)
OriginalL'auteur | 2016-03-11
Vous devez vous connecter pour publier un commentaire.
Je pense que vous pouvez utiliser
str.basse
etstr.remplacez
arbitraire d'espacess/+
:avez-vous des idées de ce qui se passe avec
isin
ici?Désolé, j'étais en mode hors connexion.
OriginalL'auteur jezrael
strip
les espaces etlower
le cas:OriginalL'auteur EdChum
Vous pouvez utiliser difflib pour calculer la distance
edit : intégration avec les Pandas :
une solution éditée
OriginalL'auteur steboc
Ce que vous voulez est une chaîne de caractères en fonction de la distance sur la modification de l'effort de
distance(s1, s2)
, qui est ce que nous appelonsedit distance of strings
. Une fois que vous définissez cette fonction dans votre espace de noms que vous pouvez faire:À partir d'une recherche sur Google, les éléments suivants:
https://pypi.python.org/pypi/editdistance
C'est un problème de programmation dynamique, de sorte que vous pouvez vous mettre au défi en écrivant votre propre trop. Il peut ne pas être aussi efficace, bien qu'.
OriginalL'auteur Mai