Мы сохранили весь контент, но добавить что-то новое уже нельзя
Как в Pandas перенести в новый столбец только слова с большой буквы?
Есть список населённых пунктов, в котором указаны тип НП и его название. Например, посёлок городского типа Марьино, село Кутузовка, коттеджный поселок Осинка и т.д. Кол-во слов разное. Тип НП указан прописными буквами. Название начинается с заглавной. Нужно перенести в другой столбец только название. Марьино, Кутузовка, Осинка. Подскажите, как.
Data engineer, пишу на python, люблю sqlalchemy... · 1 февр 2023
Приветствую🖐 Хороший вопрос, если обобщить задачу, то ставится она так: _Найти некоторую подстроку в строке_
С такой задачей отлично справляются регулярные выражения, собственно для обработки строк и задумаывались. Можно пытаться как-то крутить строку - делить на слова, выбирать только по нужному индексу (например, все вторые слова) и тд - но это будет частично решать задачу и плодить крайевые случае, под которые придется писать отдельный обработчик.
Приступим к реализации, данные используем, те что предоставлены в вопросе:
Чтобы использовать мощь регулярок, необходимо импортировать модуль re:
import re
С основным синтаксисом можно ознакомится по вышеприведенной ссылке, а описание регулярного выражения будет такое: _найти слова, начинающиеся с большой буквы_ (предполагается, что наименование населенного пункта будет или первым словом с большой буквы или единственным). Паттерн может выглядеть так:
pattern = r'([А-Я].*)'
Объединяем всё и выполняем поиск нужного паттерна для каждого элемента в столбце:
def extract_city_name(string):
res = re.search(r'([А-Я]\w+)', string)
if res:
return res.groups()[0]
return None
df['place'].map(extract_city_name)
Результат:
Добавил еще одну строку, в которой нет нужного имени. Функция _extract_city_name_ работает так:
попытка что-то найти в соответствии с паттерном
если результат не пустой, то возвращаем первый найденный результат