【pandas】DataFrameの要素を正規表現で置換する方法

本記事では以下の内容を解説しています.

  • DataFrameの要素をチェックし,正規表現を使って置換
  • []で囲まれた部分を[]ごと除去(正規表現)

公式 Reference: pandas.DataFrame.replace

事前準備

まずはサンプルのDataFrameを作成します.


l = [['[注]かに', 'タラバガニ'], ['くるまえび', '[!]えび']]

df = pd.DataFrame(l, columns=['col_1', 'col_2'])
df
col_1 col_2
0 [注]かに タラバガニ
1 くるまえび [!]えび

DataFrameの要素を置換

正規表現で「[]で囲まれた」を指定

今回は正規表現を用いて置換を行うため,正規表現の準備をします.

正規表現を扱うPython標準ライブラリのreを使用し「[]で囲まれた」という正規表現をコンパイルします.これによりコンパイルしたパターンでマッチの有無([]で囲まれた部分の有無)を確認できます.


# 正規表現を扱うPython標準ライブラリ
import re

# 「[]で囲まれた」を表す正規表現をcompile
pattern = r'\[.+?\]'
compiled_pattern = re.compile(pattern)

DataFrameの要素全体を置換

pandasのreplaceメソッドでDataFrameの要素を置換します.


# 元のdfをコピー
df_all = df.copy()

df_all.replace(compiled_pattern, '', regex=True, inplace=True)
df_all
col_1 col_2
0 かに タラバガニ
1 くるまえび えび

解説

replaceメソッドはDataFrame(Series)の要素を置換できるメソッドです.

  • 第一引数:正規表現パターンを指定
  • 第二引数:置換する文字列1を指定
  • 正規表現を使用して置換するためregex=Trueを指定

上記の処理が実行されることで「[] で囲まれた部分」があれば取り除かれます.
なお,引数inplace=Trueで元のdf_allが更新されるようになります.2

DataFrameの特定の列だけを置換

特定の列だけを置換するには以下のようにします.


# 元のdfをコピー
df_p = df.copy()

df_p['col_1'].replace(compiled_pattern, '', regex=True, inplace=True)
df_p
col_1 col_2
0 かに タラバガニ
1 くるまえび [!]えび

指定したcol_1列だけで[]が除去されていますね.

ひとこと

DataFrameでさっと文字を綺麗にする際に使えますね.


  1. 今回の例では''(空白)を指定しています. 

  2. dfをコピーしているのはこれが理由です.