【Pandas入門】DataFrameとSeriesの値を効率的に置換する方法 replace


 

データ分析において、DataFrameやSeries内の特定の値を別の値に置き換えたい場面は頻繁にあります。Pandasの**replaceメソッド**は、この置換処理を非常に効率的かつ柔軟に行うための強力な機能です。この記事では、replaceメソッドの基本的な使い方から、知っておくと便利な応用例まで、サンプルコードを交えながら丁寧に解説します。


 

replaceメソッドとは?

 

replaceメソッドは、PandasのDataFrameおよびSeriesオブジェクトに組み込まれている関数で、指定した値を別の値に置き換えるために使用します。単一の値の置換から、複数の値の一括置換、正規表現を使った置換まで、様々なケースに対応できます。


 

replaceの基本的な使い方

 

まずは、replaceメソッドの最も基本的な使い方を見ていきましょう。

 

単一の値を置換する

 

特定の一つの値を別の値に置き換えたい場合は、引数に置換前の値置換後の値を指定します。

Python
 
import pandas as pd

# サンプルSeriesの作成
s = pd.Series([1, 2, 3, 2, 4])
print("オリジナルSeries:\n", s)

# 2を99に置換
s_replaced = s.replace(2, 99)
print("\n置換後Series:\n", s_replaced)

解説:

上記の例では、Series s 内の2という値をすべて99に置換しています。

 

複数の値を一括置換する

 

複数の値を同時に置換したい場合は、辞書形式 {置換前の値: 置換後の値} でマッピングを指定するか、置換前の値をリストで、置換後の値を単一の値で指定します。

 

辞書を使って複数の値を置換

 

最も一般的な方法です。置換したい値と、それに対応する置換後の値を辞書形式で渡します。

Python
 
# サンプルDataFrameの作成
df = pd.DataFrame({
    'A': [1, 2, 3, 4],
    'B': ['apple', 'banana', 'orange', 'apple']
})
print("オリジナルDataFrame:\n", df)

# 'apple'を'fruit', 2を20に置換
df_replaced = df.replace({'apple': 'fruit', 2: 20})
print("\n置換後DataFrame:\n", df_replaced)

解説:

DataFrame df 内の’apple’は’fruit’に、2は20に置換されました。異なるデータ型の値でも同時に置換できる点が便利です。

 

リストと単一の値で複数の値を置換

 

複数の置換前の値を、すべて同じ一つの値に置換したい場合に便利です。

Python
 
s = pd.Series([1, 2, 3, 2, 1, 4])
print("オリジナルSeries:\n", s)

# 1と2を0に置換
s_replaced = s.replace([1, 2], 0)
print("\n置換後Series:\n", s_replaced)

解説:

Series s 内の1と2が、すべて0に置換されています。


 

replaceの応用的な使い方

 

replaceメソッドは、上記以外にもさまざまな柔軟な使い方があります。

 

正規表現を使った置換

 

文字列の置換においては、正規表現を利用してより複雑なパターンマッチングを行うことができます。この場合、regex=Trueを設定します。

Python
 
s = pd.Series(['apple', 'banana', 'apricot', 'grape'])
print("オリジナルSeries:\n", s)

# 'ap'で始まる文字列を'START-'に置換
s_regex_replaced = s.replace(r'^ap', 'START-', regex=True)
print("\n正規表現で置換後Series:\n", s_regex_replaced)

解説:

正規表現^apは「apで始まる文字列」を意味します。これにより、’apple’と’apricot’の先頭が’START-‘に置換されました。

 

特定の列を指定して置換

 

DataFrame全体ではなく、**特定の列(Series)**に対して置換を行いたい場合は、その列を直接選択してからreplaceメソッドを適用します。

Python
 
df = pd.DataFrame({
    'A': [1, 2, 3, 4],
    'B': ['apple', 'banana', 'orange', 'apple']
})
print("オリジナルDataFrame:\n", df)

# 'B'列の'apple'を'DeliciousApple'に置換
df['B'] = df['B'].replace('apple', 'DeliciousApple')
print("\n特定列置換後DataFrame:\n", df)

解説:

df[‘B’]として’B’列のSeriesを選択し、そのSeriesに対してreplaceを適用しています。


 

注意点とよくある間違い

 

  • inplace引数: replaceメソッドはデフォルトで新しいSeriesやDataFrameを返します。元のオブジェクトを直接変更したい場合は、inplace=Trueを設定します。ただし、inplace=Trueの使用は推奨されないことが多いので、新しい変数に代入する方がコードの可読性が高まります。

    Python
     
    s = pd.Series([1, 2, 3])
    s.replace(2, 99, inplace=True) # 非推奨とされることが多い
    print(s)
    
  • 完全一致: デフォルトでは、replaceは値の完全一致を探します。部分一致をしたい場合は、正規表現(regex=True)を使用してください。


 

まとめ

 

Pandasのreplaceメソッドは、DataFrameやSeries内の値を置換するための非常に便利で強力なツールです。単一の置換から複数の置換、正規表現によるパターンマッチングまで、様々なシナリオに対応できます。データクレンジングや前処理において頻繁に利用される機能ですので、使い方をマスターして効率的なデータ操作を行いましょう。