Как удалить круглые скобки и все данные внутри с помощью Pandas / Python?

У меня есть фрейм данных, из которого я хочу удалить все круглые скобки и прочее внутри него.

Я проверил: Как удалить текст в скобках с помощью регулярное выражение?

Где был ответ на удаление данных

re.sub(r'\([^)]*\)', '', filename)

Я пробовал это, а также

re.sub(r'\(.*?\)', '', filename)

Однако я получил ошибку: expected a string or buffer

Когда я попытался использовать столбец df['Column Name'], я получил no item named 'Column Name'

Я проверил фрейм данных с помощью df.head(), и он оказался чистой таблицей с именами столбцов такими, какими я хотел их видеть .... однако, когда я использую выражение re для удаления (материала), оно не распознает имя столбца что у меня есть.

Я обычно использую

df['name'].str.replace(" ()","") 

Однако я хочу убрать круглые скобки и то, что находится внутри .... Как я могу сделать это с помощью регулярного выражения или панд?

Спасибо!

Вот решение, которое я использовал ... спасибо за помощь!

All['Manufacturer Standard Name'] = All['Manufacturer Standard Name'].str.replace(r"\(.*\)","")

person Alexis    schedule 03.01.2014    source источник
comment
Пожалуйста, разместите df.columns.   -  person unutbu    schedule 03.01.2014
comment
Если ответ вас устраивает, отметьте его. В противном случае сообщите нам, что пошло не так.   -  person dmvianna    schedule 06.01.2014
comment
Было бы хорошо, если бы кто-нибудь попытался привести здесь пример, может ли кто-нибудь сказать, это вопрос о фрейме данных, в котором столбец имеет такие значения, как 141 (32), 982 (21), 9083 (1231), поэтому после удаления скобок мы получу данные вроде 141 982 9083 ?? Так что, пожалуйста, ответьте мне, чтобы я или другие вроде меня могли понять это.   -  person Akshay Singh    schedule 08.01.2021


Ответы (3)


df['name'].str.replace(r"\(.*\)","")

Вы не можете запускать функции re непосредственно на объектах pandas. Вы должны зациклить их для каждого элемента внутри объекта. Итак, Series.str.replace((r"\(.*\)", "") - это просто синтаксический сахар для Series.apply(lambda x: re.sub(r"\(.*\)", "", x)).

person dmvianna    schedule 03.01.2014
comment
Что, если бы я хотел поставить пробел перед скобкой и после нее? - person B Furtado; 15.12.2016
comment
@B_Furtado: " \(.*\) " или "\s\(.*\)\s", если у вас всегда есть по одному пробелу с каждой стороны. Если вы хотите заменить любое количество пробелов с обеих сторон (в том числе ни одного), используйте "\s*\(.*\)\s*". Вам следует изучить синтаксис регулярного выражения, это не так уж сложно для таких простых совпадений. Проверьте docs.python.org/3/library/re.html. - person dmvianna; 15.12.2016
comment
Спасибо @dmvianna. Я продолжаю учиться, потом никогда не использую и забываю ... Лучшее, - person B Furtado; 15.12.2016
comment
Я немного поиграл с r (. *), И я не понимаю разницы между более поздним выражением и r (.). В принципе "." относится к любому символу внутри круглых скобок, так зачем нам нужен '*'? - person JPV; 15.02.2017
comment
@R_user: '.' Относится к любому символу и без другого параметра будет относиться к одному символу. '*' означает, что предыдущий символ (любой) может быть найден от нуля до любого времени. Итак, в 'abc' '.' Соответствует 'a' (один символ), а '. *' Соответствует 'abc' (все символы). - person dmvianna; 15.02.2017
comment
Для чего нужна буква "r"? Вроде нормально работает без r? - person Esteban; 08.04.2020

# удаление нежелательных символов

Energy['Country'] = Energy['Country'].str.replace(r" \(.*\)","")

Цитата

Energy['Country'] = Energy['Country'].str.replace(r"([0-9]+)$","")

это способы, которыми вы также можете удалить нежелательные ошибки

person ANIMESH RAMASAMI    schedule 16.05.2020

Если у вас есть несколько подстрок (...) в данных, вам следует рассмотреть возможность использования либо

All['Manufacturer Standard Name'] = All['Manufacturer Standard Name'].str.replace(r"\(.*?\)","")

or

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+ пробелов, затем строка в скобках, а затем _ 12_ избавит от любых потенциальных конечных пробелов.

person Wiktor Stribiżew    schedule 21.06.2019