Python 从Dataframe中的句子中计算最频繁的100个单词

Python 从Dataframe中的句子中计算最频繁的100个单词,python,pandas,Python,Pandas,我在Pandas dataframe的一列中有文本评论,我想用它们的频率计数(在整个列中,而不是在单个单元格中)来计算N个最频繁的单词。一种方法是通过遍历每一行,使用计数器计算单词数。有更好的选择吗 代表性数据 0 a heartening tale of small victories and endu 1 no sophomore slump for director sam mendes w 2 if you are an actor who can relate to

我在Pandas dataframe的一列中有文本评论,我想用它们的频率计数(在整个列中,而不是在单个单元格中)来计算N个最频繁的单词。一种方法是通过遍历每一行,使用计数器计算单词数。有更好的选择吗

代表性数据

0    a heartening tale of small victories and endu
1    no sophomore slump for director sam mendes  w
2    if you are an actor who can relate to the sea
3    it's this memory-as-identity obviation that g
4    boyd's screenplay ( co-written with guardian

我很确定会给你你想要的(在调用most_common之前,你可能需要从计数器结果中删除一些非单词)

连同@Joran的解决方案,你也可以使用
系列。对于大量的文本/行,value_计数

 pd.Series(' '.join(df['text']).lower().split()).value_counts()[:100]
您可以从基准测试
系列中找到。值\u计数似乎比
计数器方法快两倍(2X)

对于3000行的电影评论数据集,总计40万个字符和70万个单词


我不同意@Zero

对于91000个字符串(电子邮件地址),我发现
collections.Counter(..)。最常见的(n)
更快。但是,
series.value\u计数
在超过500k个字时可能仍然更快

%%timeit
[i[0]表示计数器中的i(数据请求者['requester']。值)。最常见(5)]
#每个回路13 ms±321µs(7次运行的平均值±标准偏差,每个100个回路)
%%时间
数据请求者['requester']。值计数()。索引[:5]
#每个回路22.2 ms±597µs(7次运行的平均值±标准偏差,每个10个回路)

将数据发布为表格而不是图像通常很有帮助。谢谢John的建议,我确实尝试过使用html制作有问题的表格,但效果不佳,所以我懒散地发布了一张图像:(数据不一定总是完整的。在大多数情况下,代表性的数据是你需要的。谢谢J.Galt,我会更好地解决我的问题。这会给字符计数而不是单词计数,可能是吗?哎呀,P是谁?John Galt。次要的,我可以考虑先把列低位,然后取结果。
Counter(“.join(df[“text”].str.lower()).split())。最常见的(100)
My
My
应被视为一个词?有趣的是,您可能会注意到,对于大量行,基准
值计数
计数器
快。在复制粘贴之前,必须这样做“从集合导入计数器”这有点令人惊讶,我认为迭代和更新计数器会比执行字符串操作更快,更不用说建立一个系列了。但事实证明,更新而不是拆分是缓慢的部分…(熊猫使用cython/klib而不是普通的dict)。
 pd.Series(' '.join(df['text']).lower().split()).value_counts()[:100]
In [448]: %timeit Counter(" ".join(df.text).lower().split()).most_common(100)
10 loops, best of 3: 44.2 ms per loop

In [449]: %timeit pd.Series(' '.join(df.text).lower().split()).value_counts()[:100]
10 loops, best of 3: 27.1 ms per loop