【发布时间】:2016-06-26 17:41:36
【问题描述】:
我的 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
【问题讨论】:
-
嗨@edchum,这不是你提到的问题的重复。
-
那么你在追求
df['name1'].str.lower() == df['name2'].str.lower()这样的东西吗? -
不是真的,因为我相信完全相等会在数据中产生太多的假阴性。检查 name1 是否包含在 name2 的某处似乎更合适
-
我认为在这种情况下你应该
strip空格和lower这种情况,看我的回答 -
如果您建议使用
in之类的东西,那么您必须使用apply来执行此操作,例如df.apply(lambda x: x['A'].strip().lower() in x['B'].strip().lower(), axis=1)
标签: python pandas string dataframe