Панды отдельная струна и полоса - PullRequest
0 голосов
/ 23 мая 2018

У меня есть столбец Pandas, содержащий строку, подобную этой:

(15:38) Hello, how are you? (15:39) I am fine. (15:40) That's good.

Я хочу разделить строку по метке времени, поэтому я использовал регулярное выражение: r'\(\d{1,2}:\d{1,2}\)' Я хочу, чтобы что-то начиналось только с третьегоотметка времени до конца.Таким образом, желаемый результат будет выглядеть следующим образом:

(15:40) That's good.

Если имеется менее трех временных меток, просто оставьте эту строку пустой.

1 Ответ

0 голосов
/ 23 мая 2018

Вы можете использовать (?:(?:\(\d+:\d+\))[^\(]+){2,}(\(\d+:\d+\).*$) для извлечения последнего совпадения с вашим шаблоном вместе с extract

Это не будет работать, если в каком-либо диалоговом окне есть скобки.

Пример кадра данных

                                                text
0  (15:38) Hello, how are you? (15:39) I am fine....

extract

df.text.str.extract(r'(?:(?:\(\d+:\d+\))[^\(]+){2,}(\(\d+:\d+\).*$)')

0    (15:40) That's good.
Name: text, dtype: object

В настоящее время, если их меньшекроме трех отдельных частей диалога, он будет заполнен NaN, но вы можете использовать fillna для замены пустой строкой, если хотите.

Пример с fillna

                                                text
0  (5:40) Hello there (3:20) Goodbye (3:30) This ...
1                     (3:30) Test 2 (5:45) Last text
2                              (4:30) Foo (5:18) Bar

df.text.str.extract(r'(?:(?:\(\d+:\d+\))[^\(]+){2,}(\(\d+:\d+\).*$)').fillna('')

0    (3:30) This has 3
1
2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...