Как посчитать подходящие слова из 2 CSV-файлов - PullRequest
1 голос
/ 13 октября 2019

У меня есть 2 CSV-файла, dictionary.csv и story.csv. Я хотел посчитать, сколько слов в story.csv в строке соответствует словам из dictionary.csv

Ниже приведены усеченные примеры

Story.csv 
id    STORY
0     Jennie have 2 shoes, a red heels and a blue sneakers
1     The skies are pretty today
2     One of aesthetic color is grey
Dictionary.csv
red
green
grey
blue
black

Результат, который я ожидал, равен

output.csv
id    STORY                                                  Found
0     Jennie have 2 shoes, a red heels and a blue sneakers    2
1     The skies are pretty today                              0
2     One of aesthetic color is grey                          1

Это коды, которые у меня есть, но я получил только NaN (пустые ячейки)

import pandas as pd 
import csv

news=pd.read_csv("Story.csv") 
dictionary=pd.read_csv("Dictionary.csv")


news['STORY'].value_counts()

news['How many found in 1'] = dictionary['Lists'].map(news['STORY'].value_counts())

news.to_csv("output.csv")

Я тоже пытался использовать .str.count, но я продолжал получать нули

1 Ответ

1 голос
/ 13 октября 2019

Попробуйте это

import pandas as pd

#create the sample data frame
data = {'id':[0,1,2],'STORY':['Jennie have 2 shoes, a red heels and a blue sneakers',\
'The skies are pretty today',\
'One of aesthetic color is grey']}

word_list = ['red', 'green', 'grey', 'blue', 'black']

df = pd.DataFrame(data)

#start counting
df['Found'] = df['STORY'].astype(str).apply(lambda t: pd.Series({word: t.count(word) for word in word_list}).sum())
#alternatively, can use this
#df['Found'] = df['STORY'].astype(str).apply(lambda t: sum([t.count(word) for word in word_list]))

Вывод

df
#   id  STORY                                                Found
#0  0   Jennie have 2 shoes, a red heels and a blue sneakers 2
#1  1   The skies are pretty today                           0
#2  2   One of aesthetic color is grey                       1

Бонусное редактирование: если вы хотите увидеть подробный анализ количества слов по слову, запустите этот

df['STORY'].astype(str).apply(lambda t: pd.Series({word: t.count(word) for word in word_list}))

#   red     green   grey    blue    black
#0  1       0       0       1       0
#1  0       0       0       0       0
#2  0       0       1       0       0

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...