使用 str.contians 查看列表中的哪些单词在每个项目中

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

http://img3.mukewang.com/62ccdbe90001180d08400350.jpg

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


searchfor = list(terms['term'])

found = [reviews['review_trimmed'].str.contains(x) for x in searchfor]

result = pd.DataFrame(found)

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


缥缈止盈
浏览 89回答 3
3回答

慕工程0101907

使用 Grzegorz Skibinski 的设置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()df     review_trimmed0       dog and cat1  Cat chases mouse2    horrible thing3       noodle soup4            chilli5     pizza is Good_______________________________________________________解决方案 ( pandas.Series.str.findall)用于'|'.join将搜索到的所有项目组合成一个正则表达式字符串,以搜索任何项目。使用flag=2这意味着IGNORECASEdf.review_trimmed.str.findall('|'.join(searchfor), 2)0    [dog, cat]1         [Cat]2    [horrible]3        [soup]4            []5        [Good]Name: review_trimmed, dtype: object我们可以join这样';':df.review_trimmed.str.findall('|'.join(searchfor), 2).str.join(';')0     dog;cat1         Cat2    horrible3        soup4            5        GoodName: review_trimmed, dtype: object

ITMISS

使用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 pdimport numpy as npdf=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       found0       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     found0       dog and cat   dog;cat1  Cat chases mouse       cat2    horrible thing  horrible3       noodle soup      soup4            chilli5     pizza is Good      good

12345678_0001

我通过for循环尝试了这个,import pandas as pdwords_to_look=['Yes','No']sentences=['He knows Yes No Yes','No He dont know','He Know' ]df=pd.DataFrame(sentences,columns=['Comments_to_look'])string=""final_list=[]for item in df['Comments_to_look']:    items=set(item.split())    for item2 in items:        for item3 in words_to_look:            if item2==item3:                string=item3+" "+string                break    final_list.append(string)    string=""df['words occured']=final_listprint(df)输出    Comments_to_look      words occured0   He knows Yes No Yes   Yes No1   No He dont know       No2   He Know 
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python