我的列表
rerunSearchEditorSearch
mylist = [apple, banana, grape]
要匹配文本中包含列表的内容,请执行以下操作。
df
text
I love banana
apple is delicious
I eat pineapple
hate whitegrape
匹配时出现问题,但是由于列表前面没有空格,因此我要查找的“苹果”包含在“菠萝”中,因此匹配。
再举一个例子,我正在寻找“葡萄”,但是白葡萄中含有葡萄,所以这也算在内。
如何在列表中每个索引的开头添加空格?
mylist = [f"(?i){re.escape(k.lower())}" for k in mylist]
extracted = df['text'].str.lower().str.findall(f'({"|".join(mylist)})').apply(set)
df['matching'] = extracted.str.join(',')
得到我想要的
result above
text matching
I love banana banana
apple is delicious apple
I eat pineapple apple
hate whitegrape grape
答案 0 :(得分:2)
然后您可以split
df.text.str.lower().str.split().apply(lambda x : [y for y in x if y in mylist]).str[0]
Out[227]:
0 banana
1 apple
2 NaN
3 NaN
Name: text, dtype: object
使用str.findall
df.text.str.lower().str.findall(r'\b({0})\b'.format('|'.join(mylist)))
Out[248]:
0 [banana]
1 [apple]
2 []
3 []
Name: text, dtype: object
答案 1 :(得分:1)
您可以使用:
df.text.str.extract(f"(?i)\\b({'|'.join(mylist)})\\b")
0
0 banana
1 apple
2 NaN
3 NaN
当然,您可以根据自己的示例将extract
更改为findall