Теперь Кью работает в режиме чтения

Мы сохранили весь контент, но добавить что-то новое уже нельзя

Как в Pandas перенести в новый столбец только слова с большой буквы?

Есть список населённых пунктов, в котором указаны тип НП и его название. Например, посёлок городского типа Марьино, село Кутузовка, коттеджный поселок Осинка и т.д. Кол-во слов разное. Тип НП указан прописными буквами. Название начинается с заглавной. Нужно перенести в другой столбец только название. Марьино, Кутузовка, Осинка. Подскажите, как. 
PythonКоды+2
Аркадий
  ·   · 380
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_ работает так:
  • попытка что-то найти в соответствии с паттерном
  • если результат не пустой, то возвращаем первый найденный результат
  • если ничего найти не удалось, то возвращаем None
Дело сделано👌