У меня есть фрейм данных pandas с серией, которую я хотел бы отредактировать. В некоторых строках есть такой шаблон: <a class = "authors-detail__display-name" href = "/staff/nathan-smith/">Nathan Smith</a>'.
Мой шаблон регулярного выражения (?<=>)(.*?)(?=<)
соответствует чему-либо между '>' и '<'. Я хотел бы отредактировать и вернуть совпадение строк для строк, в которых существует этот шаблон. В других строках я бы ничего не делал, если шаблон ничего не соответствует.
Каков идеальный способ справиться с этой проблемой в пандах?
data['author'].str.findall(("(?<=>)(.*?)(?=<)"))
возвращает логический элемент для совпадений, это правильное направление?
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