#python #regex #pandas
#python #регулярное выражение #pandas
Вопрос:
Я пытаюсь изменить столбец имен в наборе данных только на фамилию человека, чтобы я мог консолидироваться по семье; то есть Джон Смит, Мэри Смит, Джозетт Смит будут называться просто Смит. Я пытался использовать регулярное выражение, но не могу найти способ сообщить программе, чтобы она учитывала все значения перед «Smith». Я буду запускать его в столбце, поэтому я попытался стандартизировать его, не вводя жестко имена.
Я уже пробовал:
child1['full_name'].replace({' * Smith':'Smith'},
regex=True, inplace = True)
где я хотел бы знать, могу ли я поместить что-то на место звездочки, чтобы делать то, что я хочу, чтобы это делало. В настоящее время он просто объединяет слово перед Smith и дает «JohnSmith», «MarySmith»…
Небольшое руководство очень поможет.
Комментарии:
1. Используйте
.*
для сопоставления с чем-либо ранееSmith
.2. Ваше регулярное выражение соответствует только пробелам перед
Smith
.3.
child['full_name'].str.split(' ').str[-1]
?
Ответ №1:
Используйте
>>> df = pd.DataFrame({'full_name':["Mary Smith", "Rose Smith", "Lisa Blaid"]})
df['full_name'].replace({r'S s Smith':'Smith'},regex=True, inplace = True)
Out:
>>> dr
full_name
0 Smith
1 Smith
2 Lisa Blaid
>>>
Объяснение выражения
--------------------------------------------------------------------------------
S non-whitespace (all but n, r, t, f,
and " ") (1 or more times (matching the
most amount possible))
--------------------------------------------------------------------------------
s whitespace (n, r, t, f, and " ") (1 or
more times (matching the most amount
possible))
--------------------------------------------------------------------------------
Smith 'Smith'
Комментарии:
1. Привет, Рышард, это частично работает; но это не работает с именами, длина которых превышает 2. Например, Эдвард Ларки Смит возвращается как Эдвард Смит.
2. @Yoko Затем используйте
r'.*s Smith'
3. @Yoko, пожалуйста, также любезно поддержите ответ.