我可以在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()
答案 0 :(得分:2)
df = pd.DataFrame(dict(
report_date=[
'2001-02-04',
'2016-11-12',
'1-1-1999',
'02-28-2012',
'1995-09-30'
]
))
df
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值相加并返回一个数字。