Есть ли более эффективный в вычислительном отношении способ найти первое вхождение, совпадающее с регулярным выражением, используя Pandas? - PullRequest
0 голосов
/ 08 сентября 2018

Есть ли в Pandas более эффективный в вычислительном отношении способ добраться до конечного результата ниже? Я хочу только первое вхождение, и с вычислительной точки зрения неэффективно найти все, а затем получить 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

1 Ответ

0 голосов
/ 08 сентября 2018

Вы можете использовать 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
...