在Python/Pandas中使用正则表达式操作符有条件地计算数据项

在Python/Pandas中使用正则表达式操作符有条件地计算数据项,python,regex,pandas,logical-operators,Python,Regex,Pandas,Logical Operators,使用Python中的pandas库,我的代码中有一个如下所示的设备: BadData = len(df[df.A1.str.contains('A|T|C|G')==False]) 这里我要做的是计算数据帧df的A1列中不包含字母A、T、C和G的任何组合的条目数 这些表达式应计为BadData: 123 您可以使用: df['A1'].str.contains('^[ACTG]+$') 它确保它以ACTG中的字母开头(regex^)和结尾(regex$),并且只包含一个或多个字符 要获得l

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

BadData = len(df[df.A1.str.contains('A|T|C|G')==False])
这里我要做的是计算数据帧
df
A1
列中不包含字母A、T、C和G的任何组合的条目数

这些表达式应计为
BadData

  • 123
  • 您可以使用:

    df['A1'].str.contains('^[ACTG]+$')
    
    它确保它以
    ACTG
    中的字母开头(regex
    ^
    )和结尾(regex
    $
    ),并且只包含一个或多个字符

    要获得
    len
    ,只需对
    False
    值求和即可:

    bad_data = sum(~df['A1'].str.contains('^[ACTG]+$'))
    
    这相当于:

    bad_data = len(df[df.A1.str.contains('^[ACTG]+$')==False])
    
    但我更喜欢读书

    例如:

    >>> 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
    

    优雅而直接的解决方案。谢谢!:)
    >>> 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