Pandas Str.Extractall найти неизвестное количество групп / регулярных выражений - PullRequest
0 голосов
/ 01 сентября 2018

После некоторых поисков я выхожу немного пустым. Я также просто регулярное выражение ...

У меня есть CSV-файл с такими данными:

header1   header2
row1      "asdf (qwer) asdf"
row2      "asdf (hghg) asdf (lkjh)"
row3      "asdf (poiu) mkij (vbnc) yuwuiw (hjgk)"

Я поместил двойные кавычки вокруг строк в header2 для ясности, что это одно поле.

Я хочу извлечь каждое вхождение слов в скобки (). В каждой строке будет хотя бы одно вхождение, но я не знаю заранее, сколько появлений слов в скобках будет в каждой строке.

Использование замечательного https://www.regextester.com/ я думаю, что мне нужно регулярное выражение \(.*?\)

Но я продолжаю получать:

ValueError: pattern contains no capture groups

код, который я использовал:

pattern = r'\(.*?\)' extracted = df.loc[:, 'header2'].str.extractall(pattern)

Любая помощь приветствуется.

спасибо

1 Ответ

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

Вы должны включить группу захвата в круглые скобки. Кроме того, при использовании extractall я бы использовал unstack, чтобы он соответствовал структуре вашего DataFrame:

df.header2.str.extractall(r'\((.*?)\)').unstack()

          0
match     0     1     2
0      qwer   NaN   NaN
1      hghg  lkjh   NaN
2      poiu  vbnc  hjgk

Если вас беспокоит производительность, не используйте pandas строковые операции:

pd.DataFrame([re.findall(r'\((.*?)\)', row) for row in df.header2])

     0     1     2
0  qwer  None  None
1  hghg  lkjh  None
2  poiu  vbnc  hjgk
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...