#regex #pandas #split
#регулярное выражение #pandas #разделить
Вопрос:
Мне нужно разделить столбец (часть фрейма данных pandas) на столбцы, описанные в ячейке. Я пробовал с помощью split(«:»), но он разбивается там, где есть часы. Какие-либо предложения, пожалуйста? Я хочу исходить из этого: введите описание изображения здесь
DOSE: 20 mg - ROUTE: oral (morning) - START: 01/Jan/20 15:39:00
к этому:
введите описание изображения здесь
Dose Route Start Stop
20 mg oral(morning) 01/jan/20 15:39:00 01/07/2020 15:39:00
Ответ №1:
Вы можете использовать
>>> import pandas as pd
>>> pattern = r"^DOSE:s*(?P<Dose>.*?)W ROUTE:s*(?P<Route>.*?)W START:s*(?P<Start>.*?)(?:W STOP:s*(?P<Stop>.*)|$)"
>>> df = pd.DataFrame({'Description':["DOSE: 20 mg - ROUTE: oral (morning) - START: 01/Jan/20 15:39:00", "DOSE: 20 mg - ROUTE: oral (morning) - START: 01/Jan/20 15:39:00 STOP: 05/Feb/20 12:33:45"]})
>>> df["Description"].str.extract(pattern).fillna("")
Dose Route Start Stop
0 20 mg oral (morning 01/Jan/20 15:39:00
1 20 mg oral (morning 01/Jan/20 15:39:00 05/Feb/20 12:33:45
Посмотрите демонстрацию регулярных выражений.
Подробные сведения
^
— начало строкиDOSE:
— буквальный текстs*
— 0 пробелов(?P<Dose>.*?)
— Групповая «Доза»: любые нулевые или более символов, как можно меньшеW
— один или несколько символов, не содержащих словROUTE:s*
—ROUTE:
и ноль или более пробелов(?P<Route>.*?)
— Групповой «маршрут»: любые нулевые или более символов, как можно меньшеW START:s*
— один или несколько символов, не содержащих слов,START:
и ноль или более пробелов(?P<Start>.*?)
— Группа «Начало»: любые нулевые или более символов, как можно меньше(?:W STOP:s*(?P<Stop>.*)|$)
— либоW STOP:s*(?P<Stop>.*)
— один или несколько символов, не содержащих словSTOP:
, и ноль или более пробелов, а затем группа «Stop» захватывает любые нулевые или более символов, как можно меньше|
— или$
— конец строки.