データクリーニングを楽々こなす!Pandas Series.str.replaceで効率的に不要な文字を削除


基本的な構文

series.str.replace(pattern, repl, n=-1, case=None, regex=True)

引数

  • regex: True の場合、pattern を正規表現として扱います。False の場合、pattern を単純な文字列として扱います。デフォルトは True です。
  • case: True の場合、大文字と小文字を区別します。False の場合、大文字と小文字を区別しません。デフォルトは None で、大文字と小文字を区別しません。
  • n: 置換を行う最大回数。デフォルトは -1 で、すべての出現箇所を置換します。
  • repl: pattern に一致する部分を置き換える文字列を指定します。
  • pattern: 置換する文字列または正規表現を指定します。

import pandas as pd

# データを作成
data = {'name': ['Alice', 'Bob', 'Charlie']}
df = pd.DataFrame(data)

# 小文字の 'a' をすべて 'A' に置換
df['name'] = df['name'].str.replace('a', 'A', regex=True)

print(df)

出力

      name
0    Alice
1    Bob
2  Charlie

この例では、Series.str.replace を使って、name 列のすべての小文字 'a' を大文字 'A' に置換しています。

  • 正規表現を使って複雑な置換を行う
  • 文字列の一部を別の文字列で置き換える
  • 特定の文字列をすべて削除する


例 1: 特定の文字列をすべて削除する

この例では、name 列のすべての 'e' を削除します。

import pandas as pd

# データを作成
data = {'name': ['Alice', 'Bob', 'Charlie']}
df = pd.DataFrame(data)

# 'e' をすべて削除
df['name'] = df['name'].str.replace('e', '')

print(df)

出力

      name
0    Ali
1    Bob
2  Charli

例 2: 文字列の一部を別の文字列で置き換える

この例では、name 列の 'Bob' を 'Robert' に置き換えます。

import pandas as pd

# データを作成
data = {'name': ['Alice', 'Bob', 'Charlie']}
df = pd.DataFrame(data)

# 'Bob' を 'Robert' に置き換える
df['name'] = df['name'].str.replace('Bob', 'Robert')

print(df)

出力

      name
0    Alice
1  Robert
2  Charlie

例 3: 正規表現を使って複雑な置換を行う

この例では、name 列のすべての数字を 'X' に置き換えます。

import pandas as pd

# データを作成
data = {'name': ['Alice123', 'Bob456', 'Charlie']}
df = pd.DataFrame(data)

# 数字をすべて 'X' に置き換える
df['name'] = df['name'].str.replace('\d', 'X', regex=True)

print(df)
      name
0    AliceXXX
1    BobXXX
2  Charlie


map 関数

map 関数は、Series の各要素に適用する関数を指定することができます。 文字列置換を行う関数として、lambda 式を使用できます。

import pandas as pd

# データを作成
data = {'name': ['Alice', 'Bob', 'Charlie']}
df = pd.DataFrame(data)

# 'a' をすべて 'A' に置換
def replace_a(s):
  return s.replace('a', 'A')

df['name'] = df['name'].map(replace_a)

print(df)

出力

      name
0    Alice
1    Bob
2  Charlie

正規表現モジュール

re モジュールを使用して、より複雑な文字列置換を行うことができます。

import pandas as pd
import re

# データを作成
data = {'name': ['Alice123', 'Bob456', 'Charlie']}
df = pd.DataFrame(data)

# 数字をすべて 'X' に置き換える
def replace_digits(s):
  return re.sub('\d', 'X', s)

df['name'] = df['name'].apply(replace_digits)

print(df)

出力

      name
0    AliceXXX
1    BobXXX
2  Charlie

文字列操作ライブラリ

fuzzywuzzytextblob などのライブラリは、より高度な文字列操作機能を提供します。 例えば、類似度の高い文字列を検出したり、スペルチェックを行ったりすることができます。

  • 機能: 特殊な文字列操作機能が必要な場合は、fuzzywuzzytextblob などのライブラリが役立ちます。
  • パフォーマンス: 大規模なデータセットの場合は、map 関数や re モジュールの方が高速に処理できる場合があります。
  • 柔軟性: map 関数や re モジュールは、より複雑な置換操作を行うことができます。
  • シンプルさ: str.replace はシンプルで使いやすいのが利点です。