【问题标题】:Remove low frequency words去除低频词
【发布时间】:2018-10-22 04:37:51
【问题描述】:

我有一个有 2 列的数据框,1 列有字符串,例如:

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

我想删除整个数据帧中出现一次的所有单词(阈值=1),例如:(如果我可以指定阈值更好)

       Col1                 Col2
1       5          how to remove word

有什么建议吗?谢谢!

【问题讨论】:

  • 你试过什么?什么不工作?
  • 我创建了一个包含所有值计数的系列,然后创建了另一个包含 1 次出现的单词的系列,然后尝试替换但得到了整个列“无”
  • 欢迎来到 StackOverflow。请按照您创建此帐户时的建议阅读并遵循帮助文档中的发布指南。 On topichow to ask 在这里申请。 StackOverflow 不是设计、编码、研究或教程服务。
  • "Can Someone Help Me?" is not a valid SO question。这通常表明您需要的是与当地导师一起半小时或完成教程,而不是 Stack Overflow。

标签: python pandas dataframe text replace


【解决方案1】:

让我们在这里尝试使用Counter

  1. 将句子拆分为单词
  2. 计算全局词频
  3. 根据计算的频率过滤词
  4. 加入并重新分配

from collections import Counter
from itertools import chain

# split words into lists
v = df['Col2'].str.split().tolist() # [s.split() for s in df['Col2'].tolist()]
# compute global word frequency
c = Counter(chain.from_iterable(v))
# filter, join, and re-assign
df['Col2'] = [' '.join([j for j in i if c[j] > 1]) for i in v]

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

【讨论】:

  • 我只是在滚动我的收藏柜台,但你打败了我:-(
  • @AmiTavory 哈,对不起。不过你会得到下一个,dw :D
  • 代码还在运行,是否可以使用pandas选择代替迭代技术?
  • @hdatas 我会告诉你这种类型的字符串迭代比 pandas 可以给你的任何东西都要快。我保证我的 pandas 徽章也比 Wen 的解决方案更快。如果你有很多数据,你应该考虑使用 dask 进行分布式处理。
  • @cᴏʟᴅsᴘᴇᴇᴅ 好吧,我等一下 :)
【解决方案2】:

来自get_dummies的方法

s=df.set_index('Col1').Col2.str.get_dummies(sep=' ')


s.loc[:,s.all()].stack().reset_index(level=1).groupby('Col1')['level_1'].apply(' '.join).reset_index(name='Col2')
Out[155]: 
   Col1                Col2
0     1  how remove to word
1     5  how remove to word

【讨论】:

  • @cᴏʟᴅsᴘᴇᴇᴅ 目前没有问题,当我需要帮助时会告诉我的朋友:-)
猜你喜欢
  • 1970-01-01
  • 2020-06-24
  • 2016-01-12
  • 2019-09-19
  • 2014-01-26
  • 2020-08-10
  • 1970-01-01
  • 2021-12-23
  • 1970-01-01
相关资源
最近更新 更多