Python计算数据框中某一列中字符串(单词)的数量

6
我可以帮您进行翻译。以下是需要翻译的内容:

我有一个名为“FzListe”的列的数据框(df_hvl),其中包含以下数据:

FzListe
7MA1, 7OS1
7MA1, 7ZJB
7MA2, 7MA3, 7OS1
76G1, 7MA1, 7OS1
7MA1, 7OS1
71E5, 71E6, 7MA1, FSS1
71E4, 7MA1, 7MB1, 7OS1
71E6, 7MA1, 7OS1
7MA1
7MA1, 7MB1, 7OS1
7MA1
7MA1, 7MA2, 7OS1
04, 7MA1
76G1, 7MA1, 7OS1
76G1, 7MA1, 7OS1
7MA1, 7OS1
7MA1
76G1, 7MA1, 7OS1
76G1, 7MA1, 7OS1
71E6, 7MA1
7MA1, 7MA2, 7OS1
7MA1
7MA1
7MA1
7MA1, 7OS1
76G1, 7MA1

我想仅搜索字符串“7MA”,并计算其在列表中出现的次数。(该列表原始长度远大于此代码片段)。我不想仅搜索7MA1,因为在一行中可能还会出现7MA2和/或7MA3等内容... 数据框称为df_hvl,我已经搜索了解决方案,但没有找到。

期望的输出是什么? - jezrael
在该列中计算7MA出现的次数(包括7MA1、7MA2、7MA3等)。 - Damian
4个回答

12

我认为你需要使用 str.count 函数和 sum 函数:

print (df_hvl.FzListe.str.count(substr))
0     1
1     1
2     2
3     1
4     1
5     1
6     1
7     1
8     1
9     1
10    1
11    2
12    1
13    1
14    1
15    1
16    1
17    1
18    1
19    1
20    2
21    1
22    1
23    1
24    1
25    1
Name: FzListe, dtype: int64

substr = '7MA'
print (df_hvl.FzListe.str.count(substr).sum())
29

很好,它真的很优雅。 - Mayeul sgc

2

这也可能有效

df_hvl.FzListe.map(lambda d: "7MA" in d).sum()

这对我有用,并且似乎也适用于系列列(括号内的字符串),这很酷。 - Dan Taninecz Miller

0

我觉得我会尝试这样做

b=0
for index in df.index:
    A=df.loc[row,'FzList'].split(',')
    for element in A:
        if '7MA'in element: 
            b+=1
return b 

-2

你需要使用Series.str.count,它接受一个正则表达式模式作为第一个参数,并且还可以接受一个可选的第二个参数正则表达式 标志,用于修改匹配行为:

import re
df_hvl['FzListe'].str.count(re.escape(substr))
## enabling case insensitive match:
df_hvl['FzListe'].str.count(re.escape(substr), re.I)

你需要在Series.str.count中使用 re.escape,因为如果substr包含特殊的正则表达式元字符,它将无法正常工作。
相关帖子:
- 在正则表达式中转义字符串: 转义正则表达式字符串 如果你需要匹配整个单词...
- 自适应动态单词边界: 带有以特殊字符开头或结尾的单词边界会产生意外结果 - 动态单词边界: 使用动态正则表达式在字符串中匹配整个单词 - 处理成千上万个待搜索的整词: 在pandas dataframe中使用正则表达式匹配组的性能

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接