Строка панд извлекает все совпадения - PullRequest
2 голосов
/ 09 мая 2019

Я изучаю регулярное выражение в методе последовательностей строк панд.Мне удалось извлечь первое число из строки, но мое регулярное выражение не соответствует второму числу.Как захватить оба числа?

Обратите внимание, что вторая строка, второй элемент здесь NAN.

КОД:

import pandas as pd
df = pd.DataFrame({'a': ["number 1.23 has 1.2 ",
                         "number 12.2 has 12 "]})

pat = r""".+\s+
(\d+\.\d+)
.+
((?:\d+\.\d+)?)
.+"""


df['a'].str.extract(pat,flags=re.X,expand=True)

Дает:

0      1
1.23
12.2

Ожидаемое:

0    1
1.23 1.2
12.2 NaN

Как исправить регулярное выражение?

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

1 Ответ

2 голосов
/ 09 мая 2019

Вы можете использовать .str.findall с регулярным выражением \d+\.\d+:

>>> df['a'].str.findall(r"\d+\.\d+").to_frame()
             a
0  [1.23, 1.2]
1       [12.2]

Или,

>>> pd.DataFrame(df['a'].str.findall(r"\d+\.\d+").tolist())
      0     1
0  1.23   1.2
1  12.2  None

Шаблон соответствует

  • \d+ - 1+ цифр
  • \. - точка
  • \d+ - 1+ цифр.

Обратите внимание, что str.findall не требует, чтобы весь шаблон был заключен в группу захвата, как в случае с .str.extractall, который также может использоваться здесь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...