Pandas Dataframe生成词云遗漏非共有词汇如何解决
问题根源
你之前的代码漏词核心是两个问题:
- 分词统计逻辑有缺陷:
str.split(expand=True).stack()在各行分词长度不一致时容易丢数据,且手动将数组转元组再生成字典的写法,容易出现词和频次的映射错位 - 没有做列格式兼容:如果
viz_words列里混有字符串、列表两种格式的内容,直接调用str.split()会把列表类型的元素识别为空值,对应词汇直接丢失,最后只剩所有行都能正常解析的共有词。
修复后可直接运行的代码
import pandas as pd from wordcloud import WordCloud import matplotlib.pyplot as plt # 初始化示例DataFrame(和你给出的输出结构一致) df = pd.DataFrame({ 'index': [0, 1, 2], 'viz_words': [ 'palace boat painting reel', 'paintings painting gallery', 'biscuits cake gallery cafe' ] }) # 兼容列内混合格式:如果元素是列表就拼接为字符串,是字符串就保持原样 df['viz_words'] = df['viz_words'].apply(lambda x: ' '.join(x) if isinstance(x, list) else x) # 统计全量词汇的出现频次,不会遗漏任何出现过的词 freq_dict = df['viz_words'].str.split().explode().value_counts().to_dict() # 生成词云,默认规则就是频次越高的词渲染尺寸越大 wordcloud = WordCloud( width=800, height=400, background_color="white" ).generate_from_frequencies(freq_dict) # 展示可视化结果 plt.figure(figsize=(10, 5)) plt.imshow(wordcloud, interpolation="bilinear") plt.axis("off") plt.show()
关键改动说明
- 提前做格式兼容:不管
viz_words列存的是原始字符串还是已经分好词的列表,都能统一处理,不会因为类型问题丢数据 - 用
str.split().explode()替代原来的split(expand=True).stack()做分词展开,不会因为各行分词数量不同漏统计词汇,所有出现过的词都会被计入频次 - 直接用
value_counts().to_dict()生成词频字典,比手动遍历转元组的写法更稳定,不会出现词和频次匹配错误的问题 - 词云默认按照词频映射字号,高频词尺寸更大、低频词尺寸更小,完全符合你的可视化需求
内容的提问来源于stack exchange,提问作者Victoria S
相关产品推荐
相关产品推荐

