首页 > 解决方案 > 使用 str.contians 查看列表中的哪些单词在每个项目中

问题描述

我正在尝试提取在str.contains()搜索中找到的单词,如下图所示(但使用 pandas 和str.contains,而不是 VBA)。我正在尝试在 VBA 结果列中重新创建输出。

在此处输入图像描述

以下是我用来简单地告诉我是否在每条评论中找到这些词的方法:

searchfor = list(terms['term'])
found = [reviews['review_trimmed'].str.contains(x) for x in searchfor]
result = pd.DataFrame(found)

这很好,因为我知道哪些评论有我正在寻找的条款,但我不知道它为每个评论找到了哪些条款。我希望我的答案能够str.contains保持一致性。

标签: pythonpandascontains

解决方案


使用numpy

searchfor=[wrd.lower() for wrd in searchfor]
searchfor=set(searchfor)
df["found"]=np.bitwise_and(df["review_trimmed"].str.lower().str.split("[^\w+]").map(set), searchfor)

为了显示输出,我使用了虚拟数据:

import pandas as pd
import numpy as np
df=pd.DataFrame({"review_trimmed": ["dog and cat", "Cat chases mouse", "horrible thing", "noodle soup", "chilli", "pizza is Good"]})

searchfor="yes cat Dog soup good bad horrible".split(" ")

searchfor=[wrd.lower() for wrd in searchfor]
searchfor=set(searchfor)
df["found"]=np.bitwise_and(df["review_trimmed"].str.lower().str.split("[^\w+]").map(set), searchfor)
print(searchfor)
print(df)

输出:

#searchfor:
{'cat', 'good', 'yes', 'dog', 'bad', 'horrible', 'soup'}

#df:
     review_trimmed       found
0       dog and cat  {cat, dog}
1  Cat chases mouse       {cat}
2    horrible thing  {horrible}
3       noodle soup      {soup}
4            chilli          {}
5     pizza is Good      {good}

编辑

IIUC - 只需添加.str.join(";")

searchfor=[wrd.lower() for wrd in searchfor]
searchfor=set(searchfor)
df["found"]=np.bitwise_and(df["review_trimmed"].str.lower().str.split("[^\w+]").map(set), searchfor).str.join(";")
print(searchfor)
print(df)

输出:

{'dog', 'soup', 'cat', 'bad', 'good', 'yes', 'horrible'}
     review_trimmed     found
0       dog and cat   dog;cat
1  Cat chases mouse       cat
2    horrible thing  horrible
3       noodle soup      soup
4            chilli
5     pizza is Good      good

推荐阅读