【问题标题】:Python count string (word) in column of a dataframe数据框列中的 Python 计数字符串(单词)
【发布时间】:2017-02-28 10:09:47
【问题描述】:

我有以下数据框 (df_hvl),列名“FzListe”和以下数据:

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”并计算它在列表中出现的频率。 (这个列表原本比那个 sn-p 长得多)。我不想只搜索 7MA1,因为它可能在一行中也出现 7MA2 和/或 7MA3 等等......

Dataframe 名为 df_hvl,我搜索了解决方案,但没有找到。

【问题讨论】:

  • 期望的输出是什么?
  • 计算 7MA 在列中出现的频率(包括 7MA1、7MA2、7MA3 等)

标签: python pandas


【解决方案1】:

我认为你需要str.countsum

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

【讨论】:

  • 不错,真的很优雅
【解决方案2】:

我想我会尝试这样的事情

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 

【讨论】:

    【解决方案3】:

    这很有可能会起作用

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

    【讨论】:

      【解决方案4】:

      您需要使用接受 regex 模式作为第一个参数的Series.str.count,以及接受可以修改匹配行为的regex flags 的可选第二个参数:

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

      您需要使用re.escape,因为如果substr 包含特殊的正则表达式元字符,Series.str.count 将失败。

      相关帖子

      如果您需要匹配整个单词...

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-01-02
        • 2021-02-16
        • 2020-12-27
        • 1970-01-01
        • 2019-08-31
        • 1970-01-01
        相关资源
        最近更新 更多