从单列Pandas数据帧生成单词云

the*_*nze 4 python dataframe word-cloud pandas

我有一个Pandas数据框,有一列:犯罪类型.该列包含16种不同的"犯罪类别",我希望将其视为文字云,其中的单词根据数据框中的频率进行调整.

在此输入图像描述

我尝试使用以下代码执行此操作:

将数据带入:

fields = ['Crime type']

text2 = pd.read_csv('allCrime.csv', usecols=fields)
Run Code Online (Sandbox Code Playgroud)

要生成单词云:

wordcloud2 = WordCloud().generate(text2)
# Generate plot
plt.imshow(wordcloud2)
plt.axis("off")
plt.show()
Run Code Online (Sandbox Code Playgroud)

但是,我收到此错误:

TypeError: expected string or bytes-like object
Run Code Online (Sandbox Code Playgroud)

我能够使用以下代码从完整数据集创建一个早期的词云,但我希望单词cloud只生成特定列中的单词"犯罪类型"('allCrime.csv'包含大约13列) :

text = open('allCrime.csv').read()
wordcloud = WordCloud().generate(text)
# Generate plot
plt.imshow(wordcloud)
plt.axis("off")
plt.show()
Run Code Online (Sandbox Code Playgroud)

我是Python和Pandas的新手(并且通常编码!)所以感谢所有的帮助.

lan*_*tar 15

问题是WordCloud.generate你正在使用的方法需要一个字符串,它将计算单词实例,但你提供a pd.Series.

根据您想要生成的单词云,您可以执行以下操作:

  1. wordcloud2 = WordCloud().generate(' '.join(text2['Crime Type'])),它将连接数据帧列中的所有单词,然后计算所有实例.

  2. 使用WordCloud.generate_from_frequencies手动传字的计算的频率.


dro*_*hun 11

df = pd.read_csv('allCrime.csv', usecols=fields)

text = df['Crime type'].values 

wordcloud = WordCloud().generate(str(text))

plt.imshow(wordcloud)
plt.axis("off")
plt.show()
Run Code Online (Sandbox Code Playgroud)


Geo*_*pis 5

您需要创建一个串联的输入文本。这可以通过函数来​​完成join

fields = ['Crime type']
text2 = pd.read_csv('allCrime.csv', usecols=fields)

text3 = ' '.join(text2['Crime Type'])
wordcloud2 = WordCloud().generate(text3)
# Generate plot
plt.imshow(wordcloud2)
plt.axis("off")
plt.show()
Run Code Online (Sandbox Code Playgroud)