Как вернуть список, если они существуют в обоих файлах csv - PullRequest
1 голос
/ 25 марта 2020

У меня есть 2 файла csv, news.csv (основной файл csv) и dictionary1.csv Я могу выяснить, существует ли термин в файле news.csv в каком-либо из словарей csvs, возвращая 1 для существующего и 0 для не существует, ниже приведены мои коды:

news=pd.read_csv("news.csv")
dictionary=pd.read_csv("dictionary1.csv")

pattern='|'.join(dictionary['Lists'])

news["exist/not exist"] = np.where(
    news["STORY"].str.contains(pattern, na=False, case=False),
    1, 0
)

Но я не мог понять, как я могу вернуть списки, которые совпадают с 2 CSV. Ниже приведен мой пример news.csv

ID  STORY
1   The weather today is Sunny, but tomorrow it is expected to be rainy
2   In  UK, there are 4 seasons, winter,summer, autumn and spring
3   Food is essential in life

Мой пример dictionary1.csv

Lists
Sunny
Rainy
Winter
Summer
Spring
Autumn

Требуемый вывод:

ID  STORY                                                                  exist/not exist    similar
1   The weather today is Sunny, but tomorrow it is expected to be rainy         1              sunny, rainy
2   In  UK, there are 4 seasons, winter,summer, autumn and spring               1              winter,summer,autumn,spring
3   Food is essential in life                                                   0               -

1 Ответ

1 голос
/ 25 марта 2020

Сначала необходимо экранировать строки с re.escape для правильного разбора специальных символов регулярных выражений, а затем добавляется /b/b для границ слов - извлеченные значения между пробелами.

Затем используйте Series.str.findall с re.I для игнорирования прописных и строчных букв, а затем добавьте Series.str.join:

import re

pattern = '|'.join(r"\b{}\b".format(re.escape(x)) for x in dictionary['Lists'])

news['similar'] = news["STORY"].str.findall(pattern, flags=re.I).str.join(', ')
print (news)
   ID                                              STORY  exist/not exist  \
0   1  The weather today is Sunny, but tomorrow it is...                1   
1   2  In  UK, there are 4 seasons, winter,summer, au...                1   
2   3                          Food is essential in life                0   

                          similar  
0                    Sunny, rainy  
1  winter, summer, autumn, spring  
2                                  

Или преобразуйте оба значения в строчные на Series.str.lower:

news['similar'] = news["STORY"].str.lower().str.findall(pattern.lower()).str.join(', ')
print (news)
   ID                                              STORY  exist/not exist  \
0   1  The weather today is Sunny, but tomorrow it is...                1   
1   2  In  UK, there are 4 seasons, winter,summer, au...                1   
2   3                          Food is essential in life                0   

                          similar  
0                    sunny, rainy  
1  winter, summer, autumn, spring  
2                                  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...