我想在数据帧中取一组字符串,然后打破这些字符串以获得字符串中不同单词的计数。最终的想法是这样的:
言语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-Word-Combo:10
2-Word-Combo:15
...
3-Word-Combo:30
3-Word-Combo:40
...
等等
我感谢您的帮助!
正如@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库的现有代码应该返回。