Pandas中str.fullmatch匹配含括号内容失效,如何解决?
问题描述
现有如下结构的DataFrame:
name | injury Kevin Durant Torn Achilles (out for season)
尝试用以下代码匹配指定姓名和伤病的行:
df[df['name'].str.fullmatch('Kevin Durant') & df['injury'].str.fullmatch('Torn Achilles (out for season)')]
但返回空DataFrame,而非预期的目标行。
若去掉(out for season)部分并将fullmatch改为contains,则能得到预期结果:
df[df['name'].str.fullmatch('Kevin Durant') & df['injury'].str.contains('Torn Achilles')]
推测是(out for season)中的括号导致fullmatch无法正常工作,寻求解决办法。
解决建议
问题根源在于str.fullmatch()默认会将传入的字符串当作正则表达式处理,而括号()在正则里是分组的特殊语法,不是字面字符,所以无法匹配DataFrame里的括号内容。可以用以下两种方法解决:
方法1:关闭正则匹配,按字面匹配字符串
给str.fullmatch()加上regex=False参数,让函数直接按原始字符串内容匹配,不再解析正则特殊字符:df[df['name'].str.fullmatch('Kevin Durant') & df['injury'].str.fullmatch('Torn Achilles (out for season)', regex=False)]方法2:转义正则特殊字符
如果需要保留正则匹配的特性,可以手动把括号转义成\(和\),或者用re.escape()自动转义所有正则特殊字符:import re injury_pattern = re.escape('Torn Achilles (out for season)') df[df['name'].str.fullmatch('Kevin Durant') & df['injury'].str.fullmatch(injury_pattern)]
内容的提问来源于stack exchange,提问作者Malice
相关产品推荐
相关产品推荐

