用Python从数据框中生成词云和频率。

13

我有一个如下的数据框

Int64Index: 14830 entries, 25791 to 10668
Data columns (total 2 columns):
word    14830 non-null object
coef    14830 non-null float64
dtypes: float64(1), object(1)

我尝试使用系数作为频率而不是计数来制作词云

text = df['word']
WordCloud.generate_from_text(text)
TypeError: generate_from_text() missing 1 required positional argument: 'text'
或者
text = np.array(df['word'])
WordCloud.generate_from_text(text)
TypeError: generate_from_text() missing 1 required positional argument: 'text'

我该如何改进这段代码并创建类似于这样的词云图?

from wordcloud import WordCloud
wordcloud = WordCloud( ranks_only= frequency).generate(text)
plt.imshow(wordcloud)
plt.axis('off')
plt.show()

谢谢


这不是在Stack Overflow上公开回答问题的正确方式。最好自己编写答案,而不是将其作为问题的一部分。您甚至可以接受自己的答案来标记问题已解决。 - MERose
@MERose 谢谢,我已经完成了。 - Edward
太好了!你应该能够接受你的答案,在短暂的等待时间之后。 - MERose
@Edward,你解决了你的问题吗? - ricoms
Edward 我下面的回答正确吗?它有帮助到你吗? - ricoms
2个回答

37

对我而言,创建一个如下的字典是有效的:

d = {}
for a, x in bag.values:
    d[a] = x

import matplotlib.pyplot as plt
from wordcloud import WordCloud

wordcloud = WordCloud()
wordcloud.generate_from_frequencies(frequencies=d)
plt.figure()
plt.imshow(wordcloud, interpolation="bilinear")
plt.axis("off")
plt.show()

其中bag是一个带有wordscounts列的pandas DataFrame


1
循环在顶部是关键。谢谢 :) - Chop Labalagun

6

首先我们获取元组列表。

tuples = [tuple(x) for x in df.values]

那么

wordcloud = WordCloud().generate_from_frequencies(dict(tuples))

that's all


1
我尝试了这个,但是出现了“AttributeError: 'list' object has no attribute 'items'”的错误。你有遇到过类似的问题吗? - zanahorias
@zanahorias 将元组转换为字典,使用 dict(tuples),然后传递它就可以工作了。 """ wordcloud = WordCloud().generate_from_frequencies(dict(tuples)) - kali prasad deverasetti

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接