web-dev-qa-db-ja.com

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"\(.*\)","")
_
24
Alexis
_df['name'].str.replace(r"\(.*\)","")
_

re関数をpandasオブジェクトで直接実行することはできません。オブジェクト内の各要素に対してそれらをループする必要があります。したがって、Series.str.replace((r"\(.*\)", "")Series.apply(lambda x: re.sub(r"\(.*\)", "", x))の単なる構文上の砂糖です。

41
dmvianna

データに複数の_(...)_部分文字列がある場合は、いずれかの使用を検討する必要があります

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

または

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

違いは、_.*?_はより遅く、改行に一致しないこと、および[^()]は_(_および_)_以外のすべての文字に一致し、非常に効率的で改行に一致することです。最初のものは_(...(...)_と一致しますが、2番目のものは_(...)_のみと一致します。

これらの部分文字列を削除した後にすべての空白を正規化する場合は、検討することがあります

_All['Manufacturer Standard Name'] = All['Manufacturer Standard Name'].str.replace(r"\s*\([^()]*\)","").str.strip()
_

\s*\([^()]*\)正規表現は0+個の空白文字と一致し、括弧で囲まれた文字列と str.stip() は、後続の空白文字を削除します。

0