Python pandas регулярное выражение очень медленно - PullRequest
0 голосов
/ 09 марта 2020

У меня есть pandas фрейм данных, заполненный текстом в несколько столбцов и около 20000 строк. Мне нужно сделать несколько строковых операций для того, что я выбрал регулярное выражение. При использовании операторов OR, таких как

pattern = "string1|string2|string3"

, все нормально, и сценарий занимает около пары секунд, что нормально.

Но если я использую выражение AND (lookarounds), например

pattern = "(?=.*string1)(?=.*string2)(?=.*string3)"

это очень медленно. Я имею в виду, очевидно, что он должен вычислять все чаще и чаще, но для его завершения требуется несколько минут, даже если я использую только 2 строки.

Есть ли какой-то способ сделать более эффективный алгоритм AND для регулярных выражений, который происходит в одном линии и не связаны как

contains(string1, flags=re.I, regex=True) & contains(string2, flags=re.I, regex=True)

спасибо за возможную помощь

1 Ответ

0 голосов
/ 10 марта 2020

Будет немного быстрее, если мы добавим несколько якорей, но не ожидаем от этого более 10%.

"^(?=^.*string1)(?=^.*string2)(?=^.*string3)"
...