pandas中使用excel的模糊匹配通配符,真香

2024-06-22 44

前言

在pandas中,如何实现以下模糊匹配统计?

简单的:

由于过滤和统计两个逻辑可以在pandas中分别编写,因此代码清晰,易于使用。问题在于,要在pandas中实现模糊匹配,只能使用正则表达式或一些特定的函数。

Excel中有一类统计函数可以进行模糊匹配,例如sumif、count等。他们可以使用通配符来实现模糊匹配统计。以前的Excel公式:

问号?代表任意字符,星号*代表任意数量(0、1或n)的字符。

相比之下,这可以直接在字符串中指定pandas中的startwith、endwith和contains。

这种在字符串中直接表达模糊匹配规则的方式真是太棒了!在pandas中不可能做到这一点吗?

正则表达式的特殊字符

要在字符串中表达匹配规则,正则表达式是最好的选择。其实思路很简单,不就是把表达式字符串中的符号替换成与正则表达式匹配的符号吗?如下:

第3行:正则表达式中的点,代表任意字符

第4行:在表达式前后添加start^和end$标志

问题在于用户输入的表达式字符串可能包含正则表达式以外的符号:

这里要指出的是,搜索内容中有一个加号,但由于加号表示正则表达式中的1个或多个字符,所以结果仍然匹配成功(内容中根本没有加号)

在python正则表达式库中,有一个专门用于此目的的函数,它可以将正则表达式中所有具有特殊含义的符号转义为相应的内容:

处理后的结果中,在加号前添加反斜杠正则表达式中的反斜杠可以将特殊含义的符号转义为正则内容。

正确的步骤

现在我们把整个问题分成2个更小的??问题(有解决方案):

正则表达式中的表达式匹配excel通配符

排除正则表达式中的特殊符号

只要设计好这两步的执行顺序,应该就能顺利解决问题。

定义函数:

这个函数只做了一件事,将匹配的字符串变成满足要求的字符串表达式

第4行:首先使用reescape转换为正常内容,然后替换星号和问号。

定义测试函数:

第3行:rematch返回结果,表示匹配

写一些简单的测试:

没有报错,证明没有问题。

只需在pandas的seriesstrmatch函数上使用它即可:

然而,每次都这样调用是很冗长的。可以将其封装成一个函数:

现已推出:

不要忘记连续按三个。您的点赞、收藏、关注是我创作的动力。

本站文章均由用户上传或转载而来,该文章内容本站无法检测是否存在侵权,如果本文存在侵权,请联系邮箱:2287318951@qq.com告知,本站在7天内对其进行处理。