如何比较pandas中的两个字符串变量?

2024-04-23 18:55:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我的Pandas数据集中有两个字符串列

name1     name2
John Doe  John Doe
AleX T    Franz K

我需要检查name1是否等于name2。 我现在用的天真的方法是用一个简单的面具

mask=df.name1==df.name2

但问题是,可能有错误标记的字符串(以一种不可预测的方式-数据太大)阻止了精确匹配的发生。

例如,“John Doe”和“John Doe”不匹配。当然,我修剪,降低了我的弦乐,但其他的可能性仍然存在。

一个想法是查看name1是否包含在name2中。但似乎我不能将str.contains与另一个变量一起用作参数。还有其他想法吗?

非常感谢!

编辑:使用isin会产生非感官结果。 示例

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

Tags: 数据字符串testdfoutjohneddiedoe
3条回答

strip空格和lower案例:

In [414]:
test['A'].str.strip().str.lower() == test['B'].str.strip().str.lower()

Out[414]:
0     True
1    False
2    False
dtype: bool

可以使用difflib计算距离

import difflib as dfl
dfl.SequenceMatcher(None,'John Doe', 'John doe').ratio()

编辑:与熊猫的集成:

import pandas as pd
import difflib as dfl
df = pd.DataFrame({'A': ["john doe", " john doe", 'John'], 'B': [' john doe', 'eddie murphy', 'batman']})
df['VAR1'] = df.apply(lambda x : dfl.SequenceMatcher(None, x['A'], x['B']).ratio(),axis=1)

我想你可以用^{}^{}来表示任意空格s/+

test = pd.DataFrame({'A': ["john  doe", " john doe", 'John'], 
                     'B': [' john doe', 'eddie murphy', 'batman']})

print test['A'].str.lower().str.replace('s/+',"") == 
      test['B'].str.strip().str.replace('s/+',"")


0     True
1    False
2    False
dtype: bool

相关问题 更多 >