不能对pandas / python中与正则表达式匹配的行求和

时间:2016-10-28 16:55:44

标签: python regex pandas

我可以在pandas数据框中的列中找到不遵循模式但不遵循相同模式的行数的行数!

这有效:

df.report_date.apply(lambda x: (not re.match(r'[0-9]{4}-[0-9]{1,2}-[0-9]{1,2}', x))).sum()

这不是:删除'不是'不告诉我有多少行匹配但引发了一个TypeError。知道为什么会这样吗? df.report_date.apply(lambda x: (re.match(r'[0-9]{4}-[0-9]{1,2}-[0-9]{1,2}', x))).sum()

2 个答案:

答案 0 :(得分:2)

df = pd.DataFrame(dict(
       report_date=[
           '2001-02-04',
           '2016-11-12',
           '1-1-1999',
           '02-28-2012',
           '1995-09-30'
        ]
    ))
df

enter image description here

regex = r'[0-9]{4}-[0-9]{1,2}-[0-9]{1,2}'
print('does match:    {}\ndoesn\'t match: {}'.format(
        df.report_date.str.match(regex).sum(),
        df.report_date.str.match(regex).__neg__().sum()
    ))

does match:    3
doesn't match: 2

regex = r'[0-9]{4}-[0-9]{1,2}-[0-9]{1,2}'
df.groupby(df.report_date.str.match(regex)).size()

report_date
False    2
True     3
dtype: int64

答案 1 :(得分:2)

问题是匹配函数在匹配时不返回True,它返回一个匹配对象。 Pandas无法添加此匹配对象,因为它不是整数值。你使用'不是'是因为它返回一个布尔值True,大熊猫可以将True值相加并返回一个数字。