Как удалить круглые скобки и все данные с помощью 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() избавится от любых потенциальных конечных пробелов.