python - 根据大量 python 数据框的字数删除关键字

标签 python pandas dataframe

如果我有这个包含 41,000 行的 df 数据框包含数千个单词,例如像这样的 df:

column1                                                                   column2
better spotted better rights rights rights fresh fresh rights rights      2015
better rights reserved                                                    2016
better                                                                    2015
better horse                                                              2014

我用这段代码得到了从 dfdf2 每个词的出现频率:

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

我的 df2 看起来像这样:

关键字计数 发现 1 更好 5 新鲜 2 权利 6 马 1 保留 1

然后如何根据df2去除df计数低于5次的所有关键字所以然后 df 看起来像这样:

column1                                           column2
better better rights rights rights rights rights  2015
better rights                                     2016
better                                            2015
better                                            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,这太疯狂了。

谁能帮我摆脱这种挫败感?谢谢

最佳答案

尽管您创建了 df2,但在 value_counts 之前使用 stacked 系列会更容易。这允许您过滤它,然后 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_counts DataFrame,您可以对其进行子集化并通过仅指定截止值来生成 ListKeywords。但是,我们已经拆分 'column1' 系列以获取计数,因此在此处重新进行此计算效率相当低。

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]})

关于python - 根据大量 python 数据框的字数删除关键字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59845910/

相关文章:

python - Pandas groupby 变换以获取非空日期值

r - 如何在不使用科学记数法的情况下在R数据框中显示数字列('e+07')

python - 将多个类序列化为 JSON

python - 使用 unravel_index 查找最大数字的索引

python - 使用自定义函数计算 pandas 的每日聚合

python - Pandas - 添加平均值、最大值、最小值作为数据框中的列

python - 根据指定的索引对数据框进行排序

python - 从数据系列创建 DataFrame

python - 权重 python 错误 SyntaxError

python - 如何在python中发送电子邮件