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

如何移除DataFrame中的低频词(支持自定义阈值)

解决方案:移除DataFrame中低频单词

没问题,我来帮你搞定这个需求——我们可以先全局统计所有单词的出现频率,再根据自定义阈值过滤掉低频词,最后处理每一行的文本内容。下面是完整的实现步骤和代码:

步骤1:准备示例数据

先还原你的示例DataFrame:

import pandas as pd
from collections import Counter

# 创建示例DataFrame
df = pd.DataFrame({
    'Col1': [1, 5],
    'Col2': ['how to remove this word', 'how to remove the word']
})

步骤2:统计全局单词频率

把Col2里的所有文本拆分成单词,统计每个单词在整个DataFrame中的出现次数:

# 拆分所有文本为单词列表,展平后统计频率
all_words = df['Col2'].str.split(expand=True).stack().tolist()
word_counts = Counter(all_words)

运行后word_counts的结果是:
Counter({'how': 2, 'to': 2, 'remove': 2, 'word': 2, 'this': 1, 'the': 1})

步骤3:定义过滤函数并应用

写一个函数,传入每行文本、频率字典和阈值,返回过滤后的文本:

def filter_low_freq_words(text, count_dict, threshold=1):
    # 拆分文本为单词列表
    words = text.split()
    # 保留出现次数大于阈值的单词
    filtered_words = [word for word in words if count_dict[word] > threshold]
    # 重新拼接成字符串
    return ' '.join(filtered_words)

# 应用函数到Col2,这里设置阈值为1(移除出现次数≤1的单词)
df['Col2'] = df['Col2'].apply(filter_low_freq_words, args=(word_counts, 1))

# 可选:过滤掉处理后Col2为空的行(如果存在的话)
df = df[df['Col2'] != ''].reset_index(drop=True)

最终结果

运行上述代码后,得到的DataFrame如下:

Col1                Col2
0     1  how to remove word
1     5  how to remove word

(注:你的示例预期结果只保留了第二行,可能是笔误;如果需要移除重复行,可以额外添加df = df.drop_duplicates())

自定义阈值

如果需要调整阈值,比如移除出现次数≤2的单词,只需要修改函数参数即可:

df['Col2'] = df['Col2'].apply(filter_low_freq_words, args=(word_counts, 2))

此时所有出现次数不超过2的单词都会被移除,Col2会变为空字符串,对应的行也会被过滤掉。


内容的提问来源于stack exchange,提问作者hdatas

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:21:22