В пандах, каков идеальный способ использования регулярных выражений для сохранения подстрок в серии, где есть совпадение, иначе сохраните существующую строку?

У меня есть фрейм данных pandas с серией, которую я хотел бы отредактировать. В некоторых строках есть такой шаблон: <a class = "authors-detail__display-name" href = "/staff/nathan-smith/">Nathan Smith</a>'.

Мой шаблон регулярного выражения (?<=>)(.*?)(?=<) соответствует чему-либо между '>' и '<'. Я хотел бы отредактировать и вернуть совпадение строк для строк, в которых существует этот шаблон. В других строках я бы ничего не делал, если шаблон ничего не соответствует.

Каков идеальный способ справиться с этой проблемой в пандах?

data['author'].str.findall(("(?<=>)(.*?)(?=<)")) возвращает логический элемент для совпадений, это правильное направление?

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
0
65
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

replace вам не поможет, так как вы не заменяете на известное значение, вы должны использовать экстракт. Используйте data.dropna() для удаления значений NaN

#Код:

import pandas as pd

data = pd.DataFrame({'author': ['<a class = "authors-detail__display-name" href = "/staff/nathan-smith/">Nathan Smith</a>',
'<a class = "authors-detail__display-name" href = "/staff/nathan-smith" />', 
'<a class = "authors-detail__display-name" href = "/staff/nathan-smith/">James Great</a>']})
print(data)

data['author'] = data['author'].str.extract('.*[>](.*?)[<].*', expand=True)
print(data)

#Выход:

                                              author
0  <a class = "authors-detail__display-name" href = "...
1  <a class = "authors-detail__display-name" href = "...
2  <a class = "authors-detail__display-name" href = "...
         author
0  Nathan Smith
1           NaN
2   James Great

Другие вопросы по теме