Посмотрите, какие слова из списка в каждом элементе, используя str.contians - PullRequest
1 голос
/ 29 января 2020

Я пытаюсь извлечь слова, которые были найдены при поиске str.contains(), как показано на рисунке ниже (но с использованием pandas и str.contains, а не VBA). Я пытаюсь воссоздать вывод в столбце результатов VBA.

enter image description here

Вот что я использовал, чтобы просто показать мне, были ли слова найдены в каждый комментарий:

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

Это замечательно, потому что я знаю, какие комментарии содержат термины, которые я ищу, но я не знаю, какие термины они нашли для каждого. Я хотел бы, чтобы мой ответ использовал str.contains для согласованности.

Ответы [ 3 ]

3 голосов
/ 29 января 2020

Использование настроек Гжегожа Скибинского

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_trimmed
0       dog and cat
1  Cat chases mouse
2    horrible thing
3       noodle soup
4            chilli
5     pizza is Good

_______________________________________________________

Решение (pandas.Series.str.findall)

  • Используйте '|'.join, чтобы объединить все искомые элементы в Строка регулярного выражения, которая ищет любой из элементов.
  • Используйте flag=2, что подразумевает IGNORECASE

df.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;cat
1         Cat
2    horrible
3        soup
4            
5        Good
Name: review_trimmed, dtype: object
3 голосов
/ 29 января 2020

Использование 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}

Редактировать

IIU C - просто добавьте .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
0 голосов
/ 29 января 2020

Я пробовал это для l oop,

import pandas as pd

words_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_list
print(df)

Выход

    Comments_to_look      words occured
0   He knows Yes No Yes   Yes No
1   No He dont know       No
2   He Know 
...