Разработка Dataframe для подсчета уникальных слов - PullRequest
1 голос
/ 30 апреля 2019

Я хочу взять набор строк в кадре данных, а затем разбить эти строки, чтобы получить количество различных слов в строках. Конечная идея такова:

Слово 1: 5 раз

Слово 2: 3 раза

Слово 3: 10 раз

...

Слово n: 13 раз

Конечная цель - взять этот набор строк, а затем расширить анализ на группы из 2 слов, 3 слов и т. Д.

Я перепробовал несколько пакетов, в том числе Pandas, re, collection и т. Д., Но, похоже, ничто не привело меня туда, куда мне нужно.

import pandas as pd

import re


fPath = 'path\there'
fName = '\BuzzWords.xlsx'

importExcel = pd.read_excel(fPath+fName, sheetname = 'DATA')
importExcel.sort_index(inplace = True)

bWList = ['words','things']

pattern = '(?i)('+'|'.join(bWList)+')'

minerFrame = importExcel[0:0]

dFCounter = max(importExcel.index)

for i in range(0,dFCounter+1):

    temp = importExcel[i:i+1]

    checker = temp[temp['description'].str.contains(pattern)]

    checker2 = checker.isnull().sum().sum()

    if checker2 > 0:
        minerFrame = minerFrame.append(temp)

minerFrame = minerFrame.reset_index(drop = True)

Этот код должен, в конечном итоге, привести к такому виду результата:

Слово 1: 10

Слово 2: 20

Слово 3: 14

...

Комбинация из 2 слов: 10

Комбинация из 2 слов: 15

...

Комбинация из 3 слов: 30

3-Word-Combo: 40

...

и т.д.

Я ценю вашу помощь!

1 Ответ

0 голосов
/ 30 апреля 2019

Как уже упоминалось @Chris, объект Counter из библиотеки collections вернет словарь уникальных слов с их количеством.Таким образом, вы можете сделать что-то вроде:

from collections import Counter

#...
bwDict = {}
for word in bwList:
    bwDict[word] = 0

for i in range(0,dFCounter+1):

    content = importExcel.loc[i, 'description']
    for key, val in Counter(content).items():
        if key in bwDict.keys():
            bwDict[key] += val

Это не вернет счетчик комбинаций, но ваш существующий код, использующий библиотеку re, должен это вернуть.

...