データの置換 map()

データの前処理では、条件ではなく何らかの対応付けにしたがって置換したいことがあります。たとえば、次のようなケースです。

  • アンケートの結果(反対/どちらでもない/賛成)を数値(-1/0/1)に変換する
  • 都道府県コード(0113など)を、人間がわかりやすいように都道府県名(北海道東京など)に変換する
  • 5段階評価(15)を3段階評価(13)に変換する(12132453に置換)

map()を使うと、指定した辞書のキーと値の対応付けにしたがってデータを置換できます。

# 指定した列の値を辞書を使って置換
df[列名].map(辞書)

具体的な例を見てみましょう。
次のような顧客ごとの顧客区分を表したデータについて考えてみます。

顧客番号顧客区分コード
0user1CA0002
1user2CA0002
2user3CA0003
3user4CA0001

顧客区分コードは、それぞれ次の顧客区分名に対応しています。

  • CA0001: 初回顧客
  • CA0002: 普通顧客
  • CA0003: 優良顧客

分析時に各コードの意味が分かりやすいように、顧客区分名に置き換えてみましょう。
顧客区分コードに対応する顧客区分名で置換する場合、次のように書きます。

# 置換に使う辞書
category_dict = {"CA0001": "初回顧客", "CA0002": "普通顧客", "CA0003": "優良顧客"}
# 辞書を使って置換
df["顧客区分コード"].map(category_dict)
0    普通顧客
1    普通顧客
2    優良顧客
3    初回顧客
Name: 顧客区分コード, dtype: object

辞書のキーと値の対応付けにしたがってデータが置換されていることがわかります。

https://images.pyq.jp/repo/prod/pandas_prepare_replace_v2/pandas_map.jpg

なお、キーが存在しない場合はNaNで置換されます。以下は、"CA0003"のキーがない辞書を適用させた例です。3行目がNaNになることがわかります。

# 置換に使う辞書(CA0003のキーがない)
category_dict = {"CA0001": "初回顧客", "CA0002": "普通顧客"}
# 辞書を使って置換
df["顧客区分コード"].map(category_dict)
0    普通顧客
1    普通顧客
2    NaN
3    初回顧客
Name: 顧客区分コード, dtype: object

コメント

タイトルとURLをコピーしました