如何根据列表从熊猫数据框中过滤子字符串?

时间:2018-11-21 16:32:46

标签: python pandas list-comprehension

我知道这是一个又一次被问到的问题,但是我对列表理解并不满意,我的代码也有些许改动。

我有一个包含关键字的数据框,如果关键字包含专用列表中的一个或多个关键字,我想过滤它们。

请注意,我并不是在寻找确切的表达式,只是在数据框中出现一个子字符串。

基本上我认为它应该看起来像这样:

substring_list = ['abc', 'def']
df[df['tag'].str.contains(substring) for substring in substring_list]

我不断收到语法错误。

有什么想法吗?

谢谢支持!

3 个答案:

答案 0 :(得分:2)

使用:

df['tag'].str.contains('|'.join(substring_list))

答案 1 :(得分:2)

只需尝试一下:

通过使用|将pattern中的单词连接起来,构造正则表达式来使用基于模式的搜索,如下所示:

df[df.tag.str.contains('|'.join(substring_list))]

如果要搜索的字符串很少,则简单的用法如下:

df[df.tag.str.contains("abc|def")]

示例示例:

>>> df
   tag
0  abc
1  edf
2  abc
3  def
4  efg

>>> df[df.tag.str.contains("abc|def")]
   tag
0  abc
2  abc
3  def

>>> substring_list = ['abc', 'def']


>>> df[df.tag.str.contains('|'.join(substring_list))]
   tag
0  abc
2  abc
3  def

答案 2 :(得分:1)

Pandas进行二进制过滤,因此它返回一个True / False列表,该字符串对应于字符串是否包含您的密钥,您可以对所有条件进行按位“与”或“或”运算,因此可以得到包含

您所有的子字符串或其中的任何一个(取决于您使用的是'and'&还是'or'| |)
df[df['tag'].str.contains('abc') | df['tag'].str.contains('def')]