PythonのPandasの文字列の抽出について

Python,イメージ

AI実装検定のご案内

ここでは PythonのPandasで文字列を抽出する方法 について、できるだけ詳しく体系的に解説します。

特にSeries.strアクセサを用いた操作に焦点を当てます。

目次

基本:文字列操作はstrアクセサを利用

Pandasでは、文字列カラムに対して .strアクセサ を使うことで、Pythonのstrre(正規表現)の機能をベクトル化して効率的に適用できます。

import pandas as pd

df = pd.DataFrame({
    "name": ["Alice Smith", "Bob Johnson", "Charlie Brown"]
})

# 例: 文字列を小文字に変換
df["name"].str.lower()

部分文字列の抽出

インデックスで抽出(スライス)

# 先頭5文字を抽出
df["name"].str[:5]

固定文字列の抽出

# "Smith" を含むかどうか
df["name"].str.contains("Smith")

# "Smith" を "S." に置換
df["name"].str.replace("Smith", "S.")

正規表現による抽出

extract()

正規表現のキャプチャグループを使って抽出できます。

import pandas as pd

df = pd.DataFrame({
    "name": ["Alice Smith", "Bob Johnson", "Charlie Brown"]
})

# 正規表現で抽出
df["first_name"] = df["name"].str.extract(r"^(\w+)")
df["last_name"]  = df["name"].str.extract(r"(\w+)$")

# 出力(Colabでは最後にdfと書くだけでもOK)
print(df)

extractall()

繰り返しパターンをすべて抽出。

df = pd.DataFrame({"text": ["ab12cd34", "ef56"]})
df["text"].str.extractall(r"(\d+)")

よく使う文字列操作

メソッド説明
.str.contains("x")パターンを含むかdf["col"].str.contains(r"\d+")
.str.startswith("x")先頭一致df["col"].str.startswith("A")
.str.endswith("x")末尾一致df["col"].str.endswith("son")
.str.extract(r"(正規表現)")抽出df["col"].str.extract(r"(\d+)")
.str.split("区切り")分割df["col"].str.split(" ")
.str.get(i)分割後の要素を取得df["col"].str.split(" ").str.get(0)
.str.findall(r"正規表現")マッチすべてをリストで取得df["col"].str.findall(r"\d+")

応用例

メールアドレスからユーザー名とドメインを抽出

df_email = pd.DataFrame({
    "email": ["alice@example.com", "bob@test.org", "charlie@work.net"]
})

df_email["user"] = df_email["email"].str.extract(r"([^@]+)")
df_email["domain"] = df_email["email"].str.extract(r"@(.+)")

print("\nメールアドレスからユーザー名とドメインを抽出")
print(df_email)

URLからドメインを抽出

df_url = pd.DataFrame({
    "url": ["https://example.com/page1", "http://test.org/home"]
})

df_url["domain"] = df_url["url"].str.extract(r"https?://([^/]+)")

print("\nURLからドメインを抽出")
print(df_url)

数字だけを抽出

df_num = pd.DataFrame({"text": ["item123", "order456", "test789"]})
df_num["number"] = df_num["text"].str.extract(r"(\d+)")

print("\n数字だけを抽出")
print(df_num)

まとめ

  • 固定長ならスライス.str[:5]
  • 単一パターンならextract
  • 複数パターンならextractall
  • 条件分岐にはcontains, startswith, endswith
  • すべてのマッチを取得したいならfindall

Pandasの文字列操作は正規表現と組み合わせることで非常に強力になります。

以上、PythonのPandasの文字列の抽出についてでした。

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

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