【问题标题】:How to count vowels and consonants in pandas dataframe (both uppercase and lowercase)?如何计算熊猫数据框中的元音和辅音(大写和小写)?
【发布时间】:2018-08-20 10:08:35
【问题描述】:

这是我的数据

No  Body
1   DaTa, Analytics
2   StackOver.

这是我的预期输出

No  Body                 Vowels   Consonant  
1   DaTa, Analytics.     5        8        
2   StackOver.           3        6 

【问题讨论】:

    标签: python regex pandas text feature-extraction


    【解决方案1】:

    您可以使用非常简单的正则表达式来计算元音的数量,而辅音的数量是所有字母的数量减去元音的数量:

    In [121]: df['Vowels'] = df.Body.str.lower().str.count(r'[aeiou]')
    
    In [122]: df['Consonant'] = df.Body.str.lower().str.count(r'[a-z]') - df['Vowels']
    
    In [123]: df
    Out[123]:
       No             Body  Vowels  Consonant
    0   1  DaTa, Analytics       5          8
    1   2       StackOver.       3          6
    

    PSy may be either a vowel or a consonant ...

    【讨论】:

    【解决方案2】:

    使用str.count 和参数re.I 忽略大小写:

    import re
    df['Vowels'] = df['Body'].str.count(r'[aeiou]', flags=re.I)
    df['Consonant'] = df['Body'].str.count(r'[bcdfghjklmnpqrstvwxzy]', flags=re.I)
    print (df)
       No             Body  Vowels  Consonant
    0   1  DaTa, Analytics       5          8
    1   2       StackOver.       3          6
    

    【讨论】:

      【解决方案3】:

      试试这个:

      vowels = set("AEIOUaeiou")
      cons = set("bcdfghjklmnpqrstvwxyzBCDFGHJKLMNPQRSTVWXYZ")
      
      df['Vowels'] = [sum(1 for c in x if c in vowels) for x in df['Body']]
      df['Consonents'] = [sum(1 for c in x if c in cons) for x in df['Body']]
      
      print (df)
      

      【讨论】:

      • 我如何获得 sample.csv ?
      • 我刚刚创建了它来测试我的代码。忽略那个。我已经编辑了我的答案
      • 这太棒了,它对其他部分的工作很有帮助,谢谢
      【解决方案4】:

      另一种选择是将str.extractall 与 or'd 条件一起应用以有效地将事物分成两列,然后按索引分组并计算列数,例如:

      counts = (
          df.Body.str.extractall('(?i)(?P<vowels>[aeiou])|(?P<consonants>[a-z])')
          .groupby(level=0).count()
      )
      

      这是因为正则表达式的(?i) 指定表达式不区分大小写,[aeiou] 将所有元音捕获到第一个匹配组(或列)中,然后[a-z] 将捕获第一个匹配的所有其他字母组没有捕获(除了元音之外的所有内容)。

      给你:

         vowels  consonants
      0       5           8
      1       3           6
      

      然后根据需要分配/加入您的原始 DF。

      【讨论】:

        猜你喜欢
        • 2020-10-30
        • 2018-08-20
        • 2021-10-10
        • 2021-08-07
        • 1970-01-01
        • 1970-01-01
        • 2018-01-14
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多