You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.01 05:33:23