如何在Pandas Datafram(Python)的语料库中找到大多数频率词

时间:2019-04-20 14:04:18

标签: python-3.x pandas nltk text-mining countvectorizer

我有如下所示的Pandas数据框。我已经标记了文本文件,并使用NLTK Countvectorizer转换为pandas数据框。此外,我已经从我的词汇表中删除了停用词和标点符号。我正在尝试在pandas数据框中找到我的语料库中最常用的单词。在下面的数据框中,“ aaron”和“ abandon”之类的词增加了10倍以上,因此这些词应该在新的数据框中。

注意:我是python的新手,我不确定如何实现它。用代码提供解释。

数据框的子集

我已经清理了语料库,而我的dataframe看上去像是

{'aaaahhhs': {990: 0, 991: 0, 992: 0, 993: 0, 994: 0, 995: 0, 996: 0, 997: 0, 998: 0, 999: 0, 1000: 1}, 'aahs': {990: 0, 991: 0, 992: 0, 993: 0, 994: 0, 995: 0, 996: 0, 997: 0, 998: 0, 999: 0, 1000: 1}, 'aamir': {990: 0, 991: 0, 992: 0, 993: 0, 994: 0, 995: 0, 996: 0, 997: 0, 998: 0, 999: 0, 1000: 1}, 'aardman': {990: 0, 991: 0, 992: 0, 993: 0, 994: 0, 995: 0, 996: 0, 997: 0, 998: 0, 999: 0, 1000: 2}, 'aaron': {990: 0, 991: 0, 992: 0, 993: 0, 994: 0, 995: 0, 996: 4, 997: 0, 998: 0, 999: 0, 1000: 14}, 'abandon': {990: 0, 991: 0, 992: 0, 993: 0, 994: 0, 995: 0, 996: 0, 997: 0, 998: 0, 999: 0, 1000: 16}}

enter image description here

2 个答案:

答案 0 :(得分:1)

如果需要前N个单词:

N = 2 
print (df.sum().nlargest(N).index)
Index(['aaron', 'abandon'], dtype='object')

另一种解决方案:

print (df.sum().sort_values(ascending=False).index[:N])
Index(['aaron', 'abandon'], dtype='object')

如果需要,也可以算在DataFrameSeries的一列中(删除to_frame):

N = 2
print (df.sum().nlargest(N).to_frame('count'))
         count
aaron       18
abandon     16
print (df.sum().sort_values(ascending=False).iloc[:N].to_frame('count'))
         count
aaron       18
abandon     16

如果需要2列DataFrame

print (df.sum().nlargest(N).rename_axis('word').reset_index(name='count'))
      word  count
0    aaron     18
1  abandon     16

print (df.sum()
         .sort_values(ascending=False).iloc[:N]
         .rename_axis('word')
         .reset_index(name='count'))
      word  count
0    aaron     18
1  abandon     16

答案 1 :(得分:1)

尝试:

dftop2 = pd.DataFrame(df.sum().sort_values(ascending=False).head(2))

您会得到:

         0
aaron   18
abandon 16