为了账号安全,请及时绑定邮箱和手机立即绑定

根据大量 python 数据帧中的字数删除关键字

根据大量 python 数据帧中的字数删除关键字

PIPIONE 2022-07-05 19:18:23
如果我有这个df数据框 41,000 行包含数千个单词,例如像这样的df:column1                                                                   column2better spotted better rights rights rights fresh fresh rights rights      2015better rights reserved                                                    2016better                                                                    2015better horse                                                              2014我用这段代码得到了从df到df2的每个单词的频率:df2 = df['column1'].str.split(expand=True).stack().value_counts()我的df2看起来像这样:keywords      countsspotted        1better         5fresh          2rights         6horse          1reserved       1然后如何删除df中基于df2计数低于 5 次的所有关键字,那么df将如下所示:column1                                           column2better better rights rights rights rights rights  2015better rights                                     2016better                                            2015better                                            2014我最初的尝试是从df2制作关键字列表,如下所示:ListKeywords = ['spotted', 'fresh', 'horse', 'reserved']然后使用以下代码从df中删除ListKeywords中的所有单词:df['column1'] = df['column1'].apply(lambda x: ' '.join([word for word in x.split() if word not in (ListKeywords)]))然后我很沮丧,因为我有 15,000 个关键字,所有行中的字数都低于 5 次。这意味着我必须将这 15,000 个关键字放入ListKeywords,这太疯狂了。任何人都可以帮助我摆脱这种沮丧吗?谢谢你
查看完整描述

1 回答

?
明月笑刀无情

TA贡献1828条经验 获得超4个赞

尽管您创建了在 value_counts 之前df2使用 ed 系列更容易。stack这允许您对其进行过滤,然后str.join仅返回您想要保留的单词。


s = df['column1'].str.split(expand=True).stack()


# Keep only words with frequency above specified threshold

cutoff = 5

s = s[s.groupby(s).transform('size') >= cutoff]


# Alignment based on original Index

df['column1'] = s.groupby(level=0).agg(' '.join)

                                            column1  column2

0  better better rights rights rights rights rights     2015

1                                     better rights     2016

2                                            better     2015

3                                            better     2014

据您所知,如果使用value_countsDataFrame,您可以对其进行子集化并ListKeywords仅通过指定截止值来生成。但是,我们已经split通过'column1'Series 来获得计数,所以在这里重新计算是相当低效的。


df2 = df['column1'].str.split(expand=True).stack().value_counts()


cutoff = 5

ListKeywords = df2[df2 >= cutoff].index

#Index(['rights', 'better'], dtype='object')


df['column1'].apply(lambda x: ' '.join([i for i in x.split(' ') if i in ListKeywords]))

起始数据


df = pd.DataFrame({'column1': ['better spotted better rights rights rights fresh fresh rights rights',

                               'better rights reserved', 'better', 'better horse'],

                   'column2': [2015, 2016, 2015, 2014]})


查看完整回答
反对 回复 2022-07-05
  • 1 回答
  • 0 关注
  • 101 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信