Удаление лишних частей строки по разделителям. Data Frame, pandas
Есть dataframe, в нем столбик "Объем мозга" в котором имеются строковые данные нескольких видов. Нужно убрать то, что находится в скобках, оставить только число без скобок и без тире. Если комбинации ')-' или '-(' не было, то ничего вообще делать не нужно.
При выполнении следующего кода:
def del_part_str(x):
l = x.find(')-')
r = x.rfind('-(')
x = x[l+2:r]
return(x)
df['new'] = df['Объем мозга'].apply(del_part_str)
Там где с двух сторон имеются скобки, получается нужный результат, остается только число которое было без скобок по середине. В других же случаях захватываются и удаляются лишние части.
Исходник:
- (850-870?-900-930-935?)-940-(953-1000??)
- (750-850-900?)-908
- 1488.0
- 1518-(1520)
Результат:
- 940
- 90
- 488
- 518
Почему так происходит и как нужно написать что бы получился ожидаемый результат?
Ответы (1 шт):
Автор решения: Namerek
→ Ссылка
import re
pat = re.compile(r'-?\(.+?\)-?')
items = [
'(850-870?-900-930-935?)-940-(953-1000??)',
'(750-850-900?)-908',
'1488.0',
'1518-(1520)',
]
print(
*map(lambda x: pat.sub('', x), items),
sep='\n'
)
# 940
# 908
# 1488.0
# 1518
Тоесть в Вашем случае можно записать так
import re
pat = re.compile(r'-?\(.+?\)-?')
def del_part_str(x):
return pat.sub('', x)
df['new'] = df['Объем мозга'].apply(del_part_str)