Как удалить круглые скобки и все данные с помощью Pandas/Python?
У меня есть DataFrame, где я хочу удалить все круглые скобки и вещи внутри него.
Я проверил:
Как удалить текст в круглых скобках с помощью регулярного выражения?
Если ответ на удаление данных был
re.sub(r'\([^)]*\)', '', filename)
Я пробовал это, а также
re.sub(r'\(.*?\)', '', filename)
Однако, я получил ошибку: expected a string or buffer
Когда я попытался использовать столбец df['Column Name']
, я получил no item named 'Column Name'
Я проверил dataframe с помощью df.head()
, и он появился как чистая таблица с именами столбцов как то, что я хотел, чтобы они были.... однако, когда я использую выражение re
для удаления (материала) не распознает имя столбца, которое у меня есть.
Обычно я использую
df['name'].str.replace(" ()","")
Однако я хочу удалить круглые скобки и то, что находится внутри. Как это сделать, используя регулярное выражение или pandas?
Спасибо!
Вот решение, которое я использовал... спасибо за помощь!
All['Manufacturer Standard Name'] = All['Manufacturer Standard Name'].str.replace(r"\(.*\)","")
Ответы
Ответ 1
df['name'].str.replace(r"\(.*\)","")
Вы не можете запускать функции re непосредственно на объектах pandas. Вы должны зацикливать их для каждого элемента внутри объекта. Итак, Series.str.replace((r"\(.*\)", "")
- это просто синтаксический сахар для Series.apply(lambda x: re.sub(r"\(.*\)", "", x))
.
Ответ 2
Если у вас есть несколько (...)
подстрок в данных, вы должны рассмотреть возможность использования
All['Manufacturer Standard Name'] = All['Manufacturer Standard Name'].str.replace(r"\(.*?\)","")
или же
All['Manufacturer Standard Name'] = All['Manufacturer Standard Name'].str.replace(r"\([^()]*\)","")
Разница в том .*?
медленнее и не соответствует разрывам строк, а [^()]
соответствует любому символу, кроме (
и )
и является достаточно эффективным и соответствует разрывам строк. Первый из них будет соответствовать (...(...)
но второй будет соответствовать только (...)
.
Если вы хотите нормализовать все пробелы после удаления этих подстрок, вы можете рассмотреть
All['Manufacturer Standard Name'] = All['Manufacturer Standard Name'].str.replace(r"\s*\([^()]*\)","").str.strip()
Регулярное выражение \s*\([^()]*\)
будет совпадать с пробелами 0+, а затем строка в скобках, а затем str.stip()
избавится от любых потенциальных конечных пробелов.