pandas中str.extract()正常但str.fullmatch()报AttributeError
问题原因
AttributeError: 'StringMethods' object has no attribute 'fullmatch' 报错的核心原因是当前环境安装的pandas版本过低:Series.str.fullmatch() 是pandas 1.1.0版本才新增的字符串方法,低于该版本的pandas中,.str 访问器对应的StringMethods类没有定义这个方法,调用就会抛出属性不存在的错误。
而代码中使用的str.extract()方法在pandas更早的版本就已上线,所以可以正常运行。
解决方法
方法一:升级pandas到1.1.0及以上版本
执行对应命令完成升级,升级后原有代码无需修改即可正常运行:# pip环境执行 pip install --upgrade pandas # conda环境执行 conda update pandas方法二:不升级版本的等价替代实现
如果受环境限制无法升级pandas,可以用已有的str.match()方法搭配正则首尾锚点实现和fullmatch()完全一致的全字符串匹配效果:str.match()默认从字符串开头开始匹配,手动加上开头锚点^和结尾锚点$,就可以实现对整个字符串的完全匹配。
替换原有报错代码为以下写法即可:# 等价于高版本 df['col1'].str.fullmatch('(' + pat + ')') df['col1'].str.match('^(' + pat + ')$')
运行效果验证
针对给出的测试数据,两种方法返回的结果完全一致:
0 True 1 False 2 False Name: col1, dtype: bool
其中索引0的aa完全匹配模式,索引1的aabc、索引2的ee不匹配,符合全匹配的预期逻辑。
内容的提问来源于stack exchange,提问作者DEs
相关产品推荐
相关产品推荐

