Python 如何按词频迭代列表和分组

Python 如何按词频迭代列表和分组,python,pandas,dataframe,pandas-groupby,Python,Pandas,Dataframe,Pandas Groupby,我试图从csv文件中查找单词在列表中出现的次数。 我试过: df['Size'] = df['Interests'].str.extract('([\S]*[\w])') sizes = df.groupby('Size').size() “兴趣所在”是我正在分析的专栏。但是,该代码不起作用。相反,它只打印每行的第一个字。例如,如果“我的兴趣”列包含以下条目: Apple, Banana, Pear, Peach Banana, Orange Strawberry, Apple, Banana

我试图从csv文件中查找单词在列表中出现的次数。 我试过:

df['Size'] = df['Interests'].str.extract('([\S]*[\w])')
sizes = df.groupby('Size').size()
“兴趣所在”是我正在分析的专栏。但是,该代码不起作用。相反,它只打印每行的第一个字。例如,如果“我的兴趣”列包含以下条目:

Apple, Banana, Pear, Peach
Banana, Orange
Strawberry, Apple, Banana
Mango, Pear, Orange
“我的尺寸”列将包含以下内容:

Apple        1
Banana       1
Strawberry   1
Mango        1
而不是

Apple        2
Banana       3
Strawberry   1
Mango        1
Pear         2
Peach        1
Orange       2
我怎样才能解决这个问题?我试着把它放在一个循环中,但我得到了错误。例如,如果我这样做:

for i in df['Interests']:
      df['Size'] = i.str.extract('([\S]*[\w])')
sizes = df.groupby('Size').size()
我得到错误“float”对象没有属性“str”

我也尝试过:
对于范围内的I(df['Interests']):

但是get:TypeError:“Series”对象不能解释为整数


有没有关于如何解决这个问题的建议?谢谢。

我认为基本的pandas方法不足以解决这个问题,因为您似乎想计算条目中的单词,而不是简单地计算符合某些条件的条目。您可能需要编写一些东西,遍历条目,然后遍历条目中的单词。在我看来,在字典中积累结果是明智的。下面是一个例子:

from collections import defaultdict
counts = defaultdict(int)
for entry in df['Interests'].values:
    for word in entry.split(','):
        # Perform any massaging required here, e.g. such as if you want to be case-insensitive
        counts[word] += 1

# counts now maps words in the entire column to number of counts of those words

您可以使用collections Counter,它为您提供一个字典,其中列出了列表中项目的频率。由于每行中的单词列表都有一个字符串表示形式,因此首先将文本拆分为这些列表

from collections import Counter
df['Size'] = df['Interests'].str.split(", ").map(lambda x: Counter(x))
print(df['Size'])

请不要发布数据的图像,发布实际数据并将其格式化为代码。很抱歉,我修复了它。在发布答案后,我意识到我不知道熊猫(这就是你正在使用的熊猫数据框,对吧?),我完全知道如何做。我了解了
extract(“([\S]*[\w])”
如何只获取列值的开头,而只提供第一个单词。我试图在我的代码中做的是将其拆分为多个值,我做到了。但我不知道如何处理多个值。我不能把它们都分配给df['Size],对吗?该代码必须在表中的一行上下文中,因此我不知道如何让它处理多行。没关系,我仍然非常感谢您的帮助。是的,我正在使用熊猫数据帧。我和你处境相同,因为我对使用pandasI还是有点陌生。我不明白你的预期输出,你只想要第一项的计数吗?