计算数据框列中列表中单词的出现次数
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"])
对数据框的值进行排序。
【讨论】:
以上是关于计算数据框列中列表中单词的出现次数的主要内容,如果未能解决你的问题,请参考以下文章