我有一个Pandads数据框,其中一列(“已处理”)是单个字符串,其中包含一些长度可变的预处理文本。
我想使用任意长度的关键字列表进行搜索,以仅返回字符串“已处理”包含列表中所有元素的行的已处理注释。
当然,我可以单独搜索这些术语,例如:
words = ['searchterm1', 'searchterm2']
notes = df.loc[(df.processed.str.contains(words[0])) & (df.processed.str.contains(words[1]))].processed
但这似乎效率低下,并且根据我使用的搜索字词数量需要使用不同的代码。
我正在寻找的东西就像....
notes = (df.loc[[(df.processed.str.contains(words[i])) for i in range(len(words))]]).processed
其中将包括
"searchterm1 foo bar searchterm"
但不包括
"foo bar searchterm1"
或
"searchterm2"
。
但是这不起作用-loc不支持生成器对象或列表作为输入。
那么查找包含多个子字符串的字符串的最佳方法是什么?谢谢!
答案 0 :(得分:1)
示例数据:
df = pd.DataFrame(data=[[1,'a', 3],
[1,'b', 4],
[2,'c', 22],
[2,'s', 3],
[2,'f', 3],
[1,'d', 56]],
columns = ['group', 'value', 'value2'])
words = ['two', 'three', 'two']
输出:
processed
0 one
1 two
2 three
3 one one
4 two, one
我修改了您的原始代码:
notes = df.loc[sum([df.processed.str.contains(word) for word in words]) > 0]
输出:
processed
1 two
2 three
4 two, one