2017-02-19 2 views
0

Я использовал BeautifulSoup и pandas для создания csv с колонками, содержащими коды ошибок и соответствующие сообщения об ошибках.Форматирование содержимого столбца pandas. Удаление завершающего текста и цифр

Перед форматированием, столбцы выглядят что-то вроде этого

-132456ErrorMessage 
-3254Some other Error 
-45466You've now used 3 different examples. 2 more to go. 
-10240 This time there was a space.  
-1232113That was a long number. 

Я успешно изолировали текст кодов, как это:

dfDSError['text'] = dfDSError['text'].map(lambda x: x.lstrip('-')) 

Это возвращает только то, что я хочу.

Но я изо всех сил пытался придумать решение для кодов.

Я попытался это:

dfDSError['codes'] = dfDSError['codes'].replace(regex=True,to_replace= r'\D',value=r'') 

Но что будет добавлять номера из сообщения об ошибке в конце номера кода. Так что для третьего примера выше, а не 45466, я бы получил 4546632. Также я бы хотел оставить знак минус минус.

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

for_removal = re.compile(r'\d\D*') 
dfDSError['codes'] = dfDSError['codes'].map(lambda x: x.rstrip(re.findall(for_removal,x)))       
TypeError: rstrip arg must be None, unicode or str 

Любые предложения? Благодаря!

ответ

0

Вы можете использовать extract:

dfDSError[['code','text']] = dfDSError.text.str.extract('([-0-9]+)(.*)', expand=True) 
print (dfDSError) 
               text  code 
0          ErrorMessage -132456 
1         Some other Error  -3254 
2 You've now used 3 different examples. 2 more t... -45466 
3     This time there was a space.  -10240 
4       That was a long number. -1232113 
Смежные вопросы