Generate word cloud from single-column Pandas dataframe
You can generate a word cloud while removing all the stop words for a single column. Let's say your data frame is df and col name is comment then the following code can help:
#Final word cloud after all the cleaning and pre-processing
import matplotlib.pyplot as plt
from wordcloud import WordCloud, STOPWORDS
comment_words = ' '
stopwords = set(STOPWORDS)
# iterate through the csv file
for val in df.comment:
# typecaste each val to string
val = str(val)
# split the value
tokens = val.split()
# Converts each token into lowercase
for i in range(len(tokens)):
tokens[i] = tokens[i].lower()
for words in tokens:
comment_words = comment_words + words + ' '
wordcloud = WordCloud(width = 800, height = 800,
background_color ='white',
stopwords = stopwords,
min_font_size = 10).generate(comment_words)
# plot the WordCloud image
plt.figure(figsize = (8, 8), facecolor = None)
plt.imshow(wordcloud)
plt.axis("off")
plt.tight_layout(pad = 0)
plt.show()
You need to create a concatenated input text. This can be done with the join
function.
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()
The problem is that the WordCloud.generate
method that you are using expects a string on which it will count the word instances but you provide a pd.Series
.
Depending on what you want the word cloud to generate on you can either do:
wordcloud2 = WordCloud().generate(' '.join(text2['Crime Type']))
, which would concatenate all words in your dataframe column and then count all instances.Use
WordCloud.generate_from_frequencies
to manually pass the computed frequencies of words.
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()