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

时间:2015-04-27 18:11:23

标签: python pandas

我在Pandas数据框的一栏中有文字评论,我想用频率计数计算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

3 个答案:

答案 0 :(得分:19)

Counter(" ".join(df["text"]).split()).most_common(100)

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

答案 1 :(得分:18)

除了@ Joran的解决方案,您还可以使用series.value_counts来处理大量文本/行

 pd.Series(' '.join(df['text']).lower().split()).value_counts()[:100]

你会发现基准series.value_counts似乎比Counter方法快两倍(2X)

适用于3000行的电影评论数据集,总计400K字符和70k字。

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

答案 2 :(得分:0)

我将不得不不同意@Zero

对于91,000个字符串(电子邮件地址),我发现collections.Counter(..).most_common(n)更快。 但是, series.value_counts 如果它们超过50万个单词,可能会更快

%%timeit
[i[0] for i in Counter(data_requester['requester'].values).most_common(5)]
# 13 ms ± 321 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)

%%timeit
data_requester['requester'].value_counts().index[:5]
# 22.2 ms ± 597 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)