从列表中搜索Pandas Dataframe中的完整单词

时间:2020-03-30 09:05:03

标签: python regex pandas

我知道这个问题已经被问了一百万遍了,但是我仍然面临着挑战。我有一个要在pandas数据框中搜索的完整单词的列表。

Counties_List = ['MOMBASA','KWALE','LAMU']

df2 = df1[df1['County/ Sub-County'].str.contains('|'.join(Counties_List))]

上面的代码部分起作用,因为它带来了我不需要的其他行,例如LAMU-NORTH等。因此,我对列表中的一项进行了正则表达式搜索,例如仅LAMU,并且代码按预期工作。如何映射其余所有列表项,以便它们可以出现在df2中。我想要一个数据框,该数据框具有我包含在列表中的完整单词。

df2[df2['County/ Sub-County'].str.contains('^LAMU$')]

1 个答案:

答案 0 :(得分:1)

似乎您希望Countries_List列中Countey/ Sub-County中的项目完全匹配。您可以使用

 df2 = df1[df1['County/ Sub-County'].str.contains(r'^(?:{})$'.format('|'.join(Counties_List)))]
 df2 = df1[df1['County/ Sub-County'].str.contains(rf'^(?:{"|".join(Counties_List)})$')] # Python 3.7+

(?i)之前添加^,以启用不区分大小写的匹配。

或者,如果您需要固定的字符串比较,只需使用isin

df2 = df1[df1['County/ Sub-County'].isin(Counties_List)]

将由Counties_List = ['MOMBASA' ,'KWALE' ,'LAMU']列表产生的正则表达式看起来像^(?:MOMBASA|KWALE|LAMU)$。非捕获组(?:...)将确保将锚应用于该组中的所有替代方案。

请参见regex demo

相关问题