计算数据帧中特定单词的出现次数

时间:2021-05-04 12:55:01

标签: python pandas

我有一个包含一串单词的列 Token 的数据框。 对于数据框每一行的 Token 列中的字符串,我想计算某些单词出现的次数。

输入:

0    ['uno', 'dos', 'one', 'two', 'tres', 'quatro',...
1    ['uuh', 'sugar', 'pie', 'honey', 'bunch', 'kno...
2    ['cant', 'get', 'satisfaction', 'cant', 'get',...
3    ['woke', 'mornin', 'mind', 'mind', 'got', 'tro...

还有一堆行,但这是格式

我有一个要检查的单词列表

words = ["uno", "dos"]

我尝试执行以下操作

def counter(row):
    return len([key for key, val in enumerate(row) if val in set(words)])

df.apply(lambda row: counter(['Token']), axis =1)

然而,这会导致错误的结果,每一行都为零。

预期输出:

0   4
1   5
2   2
3   1

我如何正确地将此函数应用于行的每个元素,或者其他什么函数可以做到这一点。

2 个答案:

答案 0 :(得分:1)

问题没有明确定义,在这里猜测:

words = ["uno", "dos"]
df = pd.DataFrame({"Token": ["A uno dos", "B dos tres", "C tres"]})

df["count"] = df.Token.apply(lambda row: len([x for x in words if x in row]))

print(df)

# Output:
        Token  count
0   A uno dos      2
1  B dos tres      1
2      C tres      0

您的主要问题似乎是您将 ['Token'] 传递给 Counter 函数,这是没有意义的,因为这样您正在检查 words 是否包含在字符串中"Token"

答案 1 :(得分:1)

在 'Token' 上使用 apply lambda,然后使用 string.count() 查找字符串中出现的单词。需要对每个单词都这样做,所以使用 list comprehension

words = ["uno", "dos"]
df = pd.DataFrame({"Token":["uno dos khela uno dos","ha ama kau a","aa uno"]})
df["Token_count"] = df.Token.apply(lambda x: sum([x.count(word) for word in words]))
print(df)   

                       Token      Token_count
    0  uno dos khela uno dos            4
    1           ha ama kau a            0
    2                 aa uno            1