计算数据框列中列表中单词的出现次数

Posted

技术标签:

【中文标题】计算数据框列中列表中单词的出现次数【英文标题】:Count occurences of word within a list in a dataframe column 【发布时间】:2021-10-15 19:01:15 【问题描述】:

有一个数据框列,其中包含文本和单词列表。我想:

#清洁

删除特殊字符(. , ^ *...) 小写 用空格分隔文本中的每个单词

#创建另一个数据框,显示列表中包含的这些单词的出现情况,如下所示:

df = pd.DataFrame([["word1 word,! word3 word4* word split5^", "other data"], ["word2 word,* word3 word4 word5", "other data"]], columns=['Description1', 'other colum'])

lista = ['word1', 'word2','word3','word4','word split5']

#Wanted result
df2 = pd.DataFrame([["word1", "1"], ["word2", "1"], ["word3", "2"], ["word4", "2"], ["word split5", "1"]], columns=['Listed words', 'occurences'])

【问题讨论】:

您能否提供一个可供其他人使用的数据框的简短示例?然后我们可以尝试复制您的代码并解决您的问题 你能解释一下你的问题吗?很遗憾,我无法理解您的问题。 @flyinthelotion 我希望解释的变化现在有所帮助。谢谢! @novonimo 我希望解释中的更改现在有所帮助。谢谢! @BrianDove35 在您的示例中,word split5^ 将被拆分为 [word, split5],而不是 word split5,还是我误解了? 【参考方案1】:

我有一个代码可以满足你的要求

import pandas as pd

df = pd.DataFrame([["word1 word,! word3 word4* word split5^", "other data"], 
                   ["word2 word,* word3 word4 word5", "other data"]], 
                  columns=['Description1', 'other colum'])

# in the word list, split in words based on space
# for each word, strip of special characters and lower
# save list of all processed occurences to res
res = []
for i, elem in enumerate(df["Description1"].to_list()):
    res.extend([''.join(filter(str.isalnum, e)).lower() for e in elem.split(sep=" ")]) 

# import Counter, the easiest solution to count elements
from collections import Counter

# make a new df
df2 = pd.DataFrame()
df2 = df2.assign(ListedWords=Counter(res).keys(),    # list each unique elements
                 Occurences=Counter(res).values())   # list occurences
df2

输出:

Out[66]: 
  ListedWords  Occurences
0       word1           1
1        word           3
2       word3           2
3       word4           2
4      split5           1
5       word2           1
6       word5           1

因此,代码会根据空格拆分单词,删除特殊字符并将单词小写(按此顺序),就像您要求的那样。 我有两点意见:我使用模块Counter(内置),因为这是计算列表中单词的最简单方法。此外,我的输出看起来与示例中的输出不同,因为如果您根据空格进行拆分,则"word split5" 不可能出现在您的输出中。 word,! 的计数相同:使用您的标准,这将作为 word 存储在最终的 df 中,因为它是一个单独的单词(用空格表示),但特殊字符被删除。

还要注意列的顺序是不一样的,因为 python dicts 是无序的。您可以使用df2.sort_values(by = ["ListedWords"]) 对数据框的值进行排序。

【讨论】:

以上是关于计算数据框列中列表中单词的出现次数的主要内容,如果未能解决你的问题,请参考以下文章

使用 R 有效地计算列中单词列表的出现次数

按条件从列表的数据框列中计算和删除元素

计算不同单词在列中出现的次数 Oracle 12c SQL

检查列表中的单词并在 pandas 数据框列中删除这些单词

计算列表列中两个元素的出现次数

如何计算Dataframe中,列中元素连续出现次数