#python #pandas #dataframe
Вопрос:
Не могли бы вы посоветовать, как получить данные между скобками и создать новую строку в панд фрейма данных
Условия таковы:
Случай 1: Если первая буква строки начинается со строчного регистра и заключена в круглые скобки, нам не нужно проверять данные внутри круглых скобок, нам нужно проверить, начинается ли строка только с малого регистра или нет
- Запись 1: Имя препарата = Col 1, Уровень = Col 2, Ограничение = Col 3.
- Запись 2: Имя препарата = Информация в скобках в колонке 1, Уровень = Колонка 2, Ограничение = Колонка 3.
Случай 2:
- В противном случае Drug_Name = Col 1, Уровень = Col 2, Ограничение= Col 3
Ввод: пример входного файла http://www.filedropper.com/input_2
ожидаемый результат: http://www.filedropper.com/output_2
Комментарии:
1. Если вы знаете регулярные выражения, вы можете использовать pd.Series.str.extract.
Ответ №1:
Для извлечения значения вы можете использовать str.extractall
. Если вам нужны все значения, вы можете создать копию значений, а затем добавить ее обратно:
df2 =df.copy()
df2['Drug Name'] = df['Drug Name'].str.extractall(r'[a-z]?.*?((. )).*',flags=re.MULTILINE).reset_index()[0]
df2 = df2.dropna() # df2 contains only values inside parantheses
pd.concat([df,df2])
Комментарии:
1. Это не извлекает все значения, в некоторых строках есть двойные скобки, такие как «карбонат кальция (антацид) жевательная таблетка 400 мг (Детский пепто)» «карбонат кальция (антацид) жевательная таблетка 500 мг (Антацид кальция)» «карбонат кальция (антацид) жевательная таблетка 750 мг(Cvs Гладкий антацид Экстра)» «карбонат кальция (антацид) жевательная таблетка 1000 мг (Внп Антацид Ультра Сильный)» только первые данные в квадратных скобках извлекаются, второй не извлекается
2. @ashok Я думал, что в вашем примере речь шла об извлечении только значений в нижнем регистре? Не могли бы вы сказать мне, если это не так? Если вы хотите также сопоставить вторые значения, удалите
[a-z]
и используйтеextractall
вместо извлечения. Дайте мне знать, если у вас все еще есть проблемы.3. Мне нужно проверить каждый первый символ строки, если он написан в нижнем регистре и заключен в круглые скобки(не имеет значения, какие данные находятся внутри круглых скобок, и нет необходимости проверять регистр также в боковых скобках), при этом условии нам нужно извлечь все данные в скобках, а остальное останется прежним, пожалуйста, проверьте мой ввод и выведите, чтобы вы узнали
4. Не правильно, пожалуйста, проверьте мой ожидаемый снимок экрана с выводом в «Карбонат кальция (антацид) жевательная таблетка 400 мгn(Детский пепто)» у нас есть данные в двух скобках, мы должны получить уровень и ограничение одинаково для обоих после извлечения, потому что они из одной ячейки, но в нашем случае он отсутствовал для всех двух скобок, пожалуйста, проверьте мой ввод и ожидаемый вывод один раз
5. Кроме того, он не извлекает все заключенные в квадратные скобки значения, которые не извлекаются, и базовый эквивалент не извлекается