我知道这是一个又一次被问到的问题,但是我对列表理解并不满意,我的代码也有些许改动。
我有一个包含关键字的数据框,如果关键字包含专用列表中的一个或多个关键字,我想过滤它们。
请注意,我并不是在寻找确切的表达式,只是在数据框中出现一个子字符串。
基本上我认为它应该看起来像这样:
substring_list = ['abc', 'def']
df[df['tag'].str.contains(substring) for substring in substring_list]
我不断收到语法错误。
有什么想法吗?
谢谢支持!
答案 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')]