pandas python中string的精确匹配

我有一个数据框中的列,其中前df:

A 0 Good to 1. Good communication EI : tathagata.kar@ae.com 1 SAP ECC Project System EI: ram.vaddadi@ae.com 2 EI : ravikumar.swarna Role:SSE Minimum Skill 

我有一个string列表

 ls=['tathagata.kar@ae.com','a.kar@ae.com'] 

现在,如果我想过滤掉

 for i in range(len(ls)): df1=df[df['A'].str.contains(ls[i]) if len(df1.columns!=0): print ls[i] 

我得到输出

 tathagata.kar@ae.com a.kar@ae.com 

但我只需要tathagata.kar@ae.com

如何实现? 正如你可以看到我已经尝试str.contains但我需要一些extact匹配

谢谢您的帮助。 但似乎我发现了一个正在运行的解决scheme。

必须使用str.contains(r'​​(?:\ s | ^ | Ei:| EI:| EI – )'+ ls [i])这似乎解决了这个问题。

尽pipe感谢@IsaacDj的帮助。

你可以简单地使用==

 string_a == string_b 

如果两个string相等,它应该返回True。 但是这并不能解决你的问题。

编辑2:您应该使用len(df1.index)而不是len(df1.columns)。 事实上,len(df1.columns)会给你列数,而不是行数。

编辑3:在阅读你的第二篇文章后,我已经理解你的问题。 你提出的解决scheme可能会导致一些错误。 例如,如果你有:

 ls=['tathagata.kar@ae.com','a.kar@ae.com', 'tathagata.kar@ae.co'] 

第一个和第三个元素将匹配str.contains(r'​​(?:\ s | ^ | Ei:| EI:| EI – )'+ ls [i])这是一个不需要的行为。

str.contains(r'​​(?:\ s | ^ | Ei:| EI:| EI – )'+ ls [i] + r'(?:\ s | $)“)

喜欢这个:

 for i in range(len(ls)): df1 = df[df['A'].str.contains(r'(?:\s|^|Ei:|EI:|EI-)'+ls[i]+r'(?:\s|$)')] if len(df1.index != 0): print (ls[i]) 

(如果你使用python 2.7,去掉“print”中的括号)

为什么不使用df1 = df [df ['A']]。 str.match (ls [i]),相当于正则expression式的匹配。