Pythonでデータ分析を行う際、Pandasライブラリを使用してデータの前処理を行う機会は非常に多いです。
その中でも、既存の値を別の値に変換する際に使用する「map」と「replace」は、初心者から上級者まで頻繁に利用されるメソッドです。
しかし、これら二つのメソッドは一見すると似たような挙動を示すため、どのように使い分ければよいか迷ってしまう場面も少なくありません。
適切に使い分けないと、意図せずデータが欠損したり、コードの可読性が低下したりする原因になります。
本記事では、2026年現在の最新のPandas環境を前提に、mapとreplaceの決定的な違いと実務での使い分け術について詳しく整理します。
mapメソッドの特徴と使い方
mapメソッドは、主にSeries(シリーズ)オブジェクトに対して適用される、1対1のデータ変換を得意とするメソッドです。
Series専用のデータ変換機能
mapメソッドの最大の特徴は、Seriesの各要素に対して特定の処理を一括して適用できる点にあります。
DataFrame全体に対して直接mapを呼び出すことはできず、特定の列を選択してから実行するのが基本の形です。
変換ルールとして「辞書(dict)」、または「関数(function)」や「Series」そのものを渡すことができます。
import pandas as pd
# サンプルデータの作成
s = pd.Series(['apple', 'banana', 'cherry'])
# 辞書を使って置換する例
mapping = {'apple': 'red', 'banana': 'yellow'}
result = s.map(mapping)
print(result)
0 red
1 yellow
2 NaN
dtype: object
辞書に含まれない値の挙動
mapメソッドを使用する際に最も注意すべき点は、辞書に存在しない値はすべて「NaN(欠損値)」に置き換わるという挙動です。
上記のコード例でも、辞書に含まれていなかった「cherry」はNaNに変換されています。
これは、mapが「すべての要素を新しい定義で再マッピングする」という性質を持っているためです。
すべての要素を網羅的に変換したい場合には非常に便利ですが、一部の値だけを書き換えたい場合には不向きな側面があります。
replaceメソッドの特徴と使い方
replaceメソッドは、その名の通り「特定の値を別の値に置換する」ためのメソッドです。
DataFrame全体にも適用可能
mapとの大きな違いの一つは、SeriesだけでなくDataFrameオブジェクトに対しても直接使用できる点です。
特定の列だけでなく、テーブル全体から特定の値を一括で修正したい場合に非常に強力なツールとなります。
import pandas as pd
# DataFrameの作成
df = pd.DataFrame({
'A': ['high', 'medium', 'low'],
'B': ['high', 'low', 'high']
})
# DataFrame全体に対して値を置換
df_replaced = df.replace('high', 'H')
print(df_replaced)
A B
0 H H
1 medium low
2 low H
辞書に含まれない値は保持される
replaceメソッドの重要な特性は、「指定しなかった値はそのまま維持される」という点です。
mapとは異なり、辞書に定義されていない値が自動的にNaNになることはありません。
そのため、データセット内の「特定の異常値だけを修正したい」といったケースではreplaceが第一選択となります。
正規表現による柔軟な置換
replaceメソッドは、引数に regex=True を指定することで正規表現を用いたパターンマッチングによる置換が可能です。
部分一致での置換や、複雑な文字列パターンの修正を行う際には、mapよりも圧倒的に柔軟な対応ができます。
mapとreplaceの決定的な違い
これら二つのメソッドの違いを理解するために、主要な要素を比較表にまとめました。
| 比較項目 | mapメソッド | replaceメソッド |
|---|---|---|
| 適用対象 | Seriesのみ | Series / DataFrame |
| 未定義値の扱い | NaNに変換される | 元の値を保持する |
| 関数の利用 | 可能(lambdaなど) | 基本不可(値の指定が主) |
| 正規表現 | 不可 | 可能(regex=True) |
| 主な用途 | カテゴリ変数のエンコーディング | 特定の値の修正・クレンジング |
対象オブジェクトの違い
mapはSeries専用であるため、DataFrameの複数の列を一度に変換したい場合は、applymap(現在はmapに統合されつつあります)や各列に対してループ処理を行う必要があります。
一方でreplaceは、DataFrame全体、リスト、辞書など、受け付ける形式が非常に多彩です。
変換ロジックの違い
mapは要素全体を新しい「写像」に置き換えるイメージです。
replaceは、特定のターゲットを見つけて「上書き」するイメージで理解すると分かりやすいでしょう。
実務での使い分けシーン
どちらを使うべきか迷った際は、以下の判断基準を参考にしてください。
カテゴリ変数の数値変換ならmap
機械学習のモデルに投入するために、文字列のカテゴリ(例:「Low」「Medium」「High」)を数値(0, 1, 2)に変換する場合、mapが適しています。
この場合、変換リストに漏れがあった際にNaNになることで、設定ミスに気付きやすいというメリットがあります。
もし意図しない値が混入していたとしても、mapを使えば即座に欠損値として検出できるため、データの整合性を保つのに役立ちます。
特定の異常値のみを修正するならreplace
アンケート結果に含まれる「不明」という文字列をNaNに変換したり、特定の誤字を一括修正したりする場合は、replaceを使用すべきです。
他の正常なデータを破壊することなく、ピンポイントで特定の要素だけを書き換えられるからです。
import pandas as pd
import numpy as np
# 異常値を含むデータ
df = pd.DataFrame({'score': [90, 85, 'ERROR', 70]})
# 特定の値だけを置換
df_cleaned = df.replace('ERROR', np.nan)
print(df_cleaned)
score
0 90.0
1 85.0
2 NaN
3 70.0
まとめ
Pandasのmapとreplaceは、どちらもデータ変換に欠かせないメソッドですが、その挙動には明確な違いがあります。
mapメソッドは、Series全体を新しい定義に塗り替える際に使用し、辞書にない値はNaNになるという特性を持っています。
replaceメソッドは、SeriesやDataFrameの中から特定の値をピンポイントで置換する際に使用し、指定外の値は保持されます。
データ変換の目的が「全要素の再定義」なのか「一部の値の修正」なのかを見極めることが、適切なメソッド選びのコツです。
それぞれの特性を正しく理解して、効率的でミスのないデータ前処理を行っていきましょう。
