【问题标题】:Using Regex Operators in Python/Pandas to Count Data Entries Conditionally在 Python/Pandas 中使用 Regex 运算符有条件地计算数据条目
【发布时间】:2018-11-08 00:01:42
【问题描述】:

使用 Python 中的 pandas 库,我的代码中有一个设备,如下所示:

BadData = len(df[df.A1.str.contains('A|T|C|G')==False])

我在这里要做的是计算数据框dfA1 列中包含字母A、T、C的任何组合的条目数, 和 G。

这些表达式应该算作BadData

  • 123

但这些表达方式不应该:

  • 一个
  • ATCG
  • 加特卡塔

我的问题:如何使用正则表达式字符在BadData 中包含“Apple”或“Golfing”等条目?

我可以像这样将条件链接在一起:

BadData = len(df[(df.A1.str.contains('A|T|C|G')==False) & (df.A1.str.contains('0|1|2|3')==TRUE)])

但在这里我面临一个难题:我是否必须定义每个违反条件的角色?这看起来很笨拙,我相信还有更优雅的方法。

【问题讨论】:

    标签: python regex pandas logical-operators


    【解决方案1】:

    你可以使用:

    df['A1'].str.contains('^[ACTG]+$')
    

    确保它以ACTG 中的字母开始(正则表达式^)和结束(正则表达式$),并且只包含一个或多个这些字符。

    要获得len,您只需将False 的值相加即可:

    bad_data = sum(~df['A1'].str.contains('^[ACTG]+$'))
    

    相当于:

    bad_data = len(df[df.A1.str.contains('^[ACTG]+$')==False])
    

    但 IMO 更易于阅读。

    例如:

    >>> df
                 A1
    0         Apple
    1       Golfing
    2             A
    3          ATTC
    4          ACGT
    5         AxTCG
    6           foo
    7             %
    8  ACT Golf GTC
    9           ACT
    
    
    >>> df['A1'].str.contains('^[ACTG]+$')
    0    False
    1    False
    2     True
    3     True
    4     True
    5    False
    6    False
    7    False
    8    False
    9     True
    Name: A1, dtype: bool
    
    bad_data = sum(~df['A1'].str.contains('^[ACTG]+$'))
    # 6
    

    【讨论】:

    • 优雅而直接的解决方案。谢谢! :)
    猜你喜欢
    • 1970-01-01
    • 2020-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多