pandas python中字符串的完全匹配

时间:2017-05-30 06:16:17

标签: regex excel python-2.7 pandas

我在数据框中有一个列,其中包括:df:

dir "C:\ssis" /b /s /ad *.* | sort >c:\ssis\task4\content.txt

我有一个字符串列表

  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  

现在,如果我想过滤掉

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

如何实现? 正如你所看到的,我已经尝试了 str.contains 但是我需要一些东西来进行比赛

3 个答案:

答案 0 :(得分:1)

你可以简单地使用==

string_a == string_b

如果两个字符串相等,它应该返回True。但这并不能解决您的问题。

编辑2:您应该使用len(df1.index)而不是len(df1.columns)。实际上,len(df1.columns)将为您提供列数,而不是行数。

编辑3:在阅读完第二篇文章后,我明白了你的问题。您提出的解决方案可能会导致一些错误。 例如,如果你有:

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”中的括号)

答案 1 :(得分:1)

感谢您的帮助。但似乎我找到了一个现在正在运作的解决方案。

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

虽然感谢@IsaacDj的帮助。

答案 2 :(得分:0)

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