データの前処理では、条件ではなく何らかの対応付けにしたがって置換したいことがあります。たとえば、次のようなケースです。
- アンケートの結果(
反対
/どちらでもない
/賛成
)を数値(-1
/0
/1
)に変換する - 都道府県コード(
01
、13
など)を、人間がわかりやすいように都道府県名(北海道
、東京
など)に変換する - 5段階評価(
1
〜5
)を3段階評価(1
〜3
)に変換する(1
と2
を1
、3
を2
、4
と5
を3
に置換)
map()
を使うと、指定した辞書のキーと値の対応付けにしたがってデータを置換できます。
# 指定した列の値を辞書を使って置換
df[列名].map(辞書)
具体的な例を見てみましょう。
次のような顧客ごとの顧客区分を表したデータについて考えてみます。
顧客番号 | 顧客区分コード | |
---|---|---|
0 | user1 | CA0002 |
1 | user2 | CA0002 |
2 | user3 | CA0003 |
3 | user4 | CA0001 |
顧客区分コード
は、それぞれ次の顧客区分名に対応しています。
- CA0001: 初回顧客
- CA0002: 普通顧客
- CA0003: 優良顧客
分析時に各コードの意味が分かりやすいように、顧客区分名に置き換えてみましょう。
顧客区分コードに対応する顧客区分名で置換する場合、次のように書きます。
# 置換に使う辞書
category_dict = {"CA0001": "初回顧客", "CA0002": "普通顧客", "CA0003": "優良顧客"}
# 辞書を使って置換
df["顧客区分コード"].map(category_dict)
0 普通顧客
1 普通顧客
2 優良顧客
3 初回顧客
Name: 顧客区分コード, dtype: object
辞書のキーと値の対応付けにしたがってデータが置換されていることがわかります。
なお、キーが存在しない場合はNaNで置換されます。以下は、"CA0003"
のキーがない辞書を適用させた例です。3行目がNaNになることがわかります。
# 置換に使う辞書(CA0003のキーがない)
category_dict = {"CA0001": "初回顧客", "CA0002": "普通顧客"}
# 辞書を使って置換
df["顧客区分コード"].map(category_dict)
0 普通顧客
1 普通顧客
2 NaN
3 初回顧客
Name: 顧客区分コード, dtype: object
コメント