PythonのPandasで正規表現を用いたデータ抽出について

Python,イメージ

AI実装検定のご案内

Pandasで正規表現(regex)を用いたデータ抽出は、テキストデータを扱う上で非常に強力です。

特にDataFrameの列に文字列データが格納されている場合、strアクセサを通じて正規表現を使った検索・抽出・変換が可能です。

以下では、代表的な使い方を詳しく解説します。

目次

データ準備

まずはPandasをインポートし、データを準備します。

import pandas as pd

# サンプルデータ
df_names = pd.DataFrame({
    "名前": ["山田太郎", "田中花子", "佐藤健", "鈴木一郎"]
})

df_emails = pd.DataFrame({
    "メール": ["taro@example.com", "hanako@test.jp", "ken@sample.net"]
})

df_phones = pd.DataFrame({
    "電話番号": ["090-1234-5678", "03-9876-5432", "080-1111-2222"]
})

df_names, df_emails, df_phones

str.contains – 特定の文字列を含む行を抽出

部分一致やパターンマッチを確認するときに便利です。

# 「田」を含む名前を抽出
df_names[df_names["名前"].str.contains("田")]
  • regex=False を指定すると正規表現ではなく単純な部分一致検索になります。
  • 大文字小文字を区別しない場合は case=False を使います。

str.match – 文字列全体に正規表現が一致するか

行頭から行全体をマッチさせたい場合に使います。

# 「山」で始まる名前を抽出
df_names[df_names["名前"].str.match("^山")]

str.extract – パターンに一致した部分を抽出

グループ化 () を使うと、特定の部分を新しい列として抽出できます。

# メールアドレスのドメイン部分を抽出
df_emails["ドメイン"] = df_emails["メール"].str.extract(r"@(.+)")
df_emails

str.replace – 正規表現を使った置換

文字列のクリーニングや整形に利用できます。

# 電話番号から数字以外を削除
df_phones["電話番号_clean"] = df_phones["電話番号"].str.replace(r"\D", "", regex=True)
df_phones

応用例:複数条件で抽出

正規表現の OR (|) や AND を駆使して複雑な条件を作れます。

# 「山」または「佐藤」を含む名前
df_names[df_names["名前"].str.contains("山|佐藤")]

よく使う正規表現パターン例

  • ^文字列 : 行頭が特定の文字列
  • 文字列$ : 行末が特定の文字列
  • . : 任意の1文字
  • \d : 数字
  • \D : 数字以外
  • \w : 英数字またはアンダースコア
  • \s : 空白文字
  • {n,m} : n回以上m回以下の繰り返し

まとめ

  • contains → 部分一致検索
  • match → 全体一致(行頭からマッチ)
  • extract → グループ化して一部を抽出
  • replace → 正規表現を使った置換

これらを組み合わせることで、データの抽出・整形・前処理が強力に行えます。

以上、Pandasで正規表現を用いたデータ抽出についてでした。

最後までお読みいただき、ありがとうございました。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次