有没有一种计算效率更高的方法来使用Pandas查找与正则表达式匹配的第一个匹配项?

2024-05-16 22:59:22 发布

您现在位置:Python中文网/ 问答频道 /正文

熊猫有没有更有效的计算方法来获得下面的最终结果?我只想要第一次出现,findall然后得到列表的第0个元素似乎计算效率很低,如下所示:

Input:
s= pd.Series(["David Matt Juan Peter David James",
            "Scott David Peter Sam David Ron",
            "Dan Phil David Sam Pedro David Mani"])
s_find= s.str.findall(r'David [A-za-z]*')
print(s_find)

Output:
0    [David Matt, David James]
1     [David Peter, David Ron]
2      [David Sam, David Mani]

Input:
s_find= s_find.str[0]
print(s_find)

Output:
0     David Matt
1    David Peter
2      David Sam

Tags: 列表inputoutputsammattfindpeterdavid
1条回答
网友
1楼 · 发布于 2024-05-16 22:59:22

您可以使用str.extract仅获取第一个匹配项:

s.str.extract('(David [A-za-z]*)')

这将返回:

0     David Matt
1    David Peter
2      David Sam
dtype: object

或者,避免使用str方法,可以使用列表理解:

import re

pd.Series([re.search('(David [A-za-z]*)', i).group() for i in s.values])

0     David Matt
1    David Peter
2      David Sam
dtype: object

相关问题 更多 >