はじめに
自己紹介
Python勉強中の大学院生です。自分が詰まったところを記録していきます。
記事を書くに至った経緯
pandasのデータフレーム内の値をmapメソッドを使って置換するやり方を整理できていなかったので、メモとしてここに残します。
本記事の概要
どんな人に読んでほしいか
- Pythonのpandasを学び始めた人
- pandasのmap関数について知りたい人
- dataframe内の値を置換する方法がわからない人
この記事に書くこと、わかること
map関数を使ったdataframe内の値の置換方法がわかります。今回整理する具体的なメソッドは以下です。
.map()
具体的な方法
例として以下のデータを使用します。(データサイエンス100本ノックの問題を参考にしています)
import pandas as pd
data = [['S12014', '千草台店', '千葉県', '千葉県千葉市稲毛区千草台一丁目'],
['C13002', '国分寺店', '東京都', '東京都国分寺市本多二丁目'],
['C14010', '菊名店', '神奈川県', '神奈川県横浜市港北区菊名一丁目'],
['S14033', '阿久和店', '神奈川県', '神奈川県横浜市瀬谷区阿久和西一丁目'],
['S13051', '板橋大原店', '東京都', '東京都板橋区大原町'],
['S14036', '相模原中央店', '神奈川県', '神奈川県相模原市中央二丁目'],
['H13015', '南砂店', '東京都', '東京都江東区南砂二丁目']]
columns = ['store_cd', 'store_name', 'prefecture', 'address']
df = pd.DataFrame(data=data, columns=columns)
df
実行結果
store_cd | store_name | prefecture | address | |
---|---|---|---|---|
0 | S12014 | 千草台店 | 千葉県 | 千葉県千葉市稲毛区千草台一丁目 |
1 | C13002 | 国分寺店 | 東京都 | 東京都国分寺市本多二丁目 |
2 | C14010 | 菊名店 | 神奈川県 | 神奈川県横浜市港北区菊名一丁目 |
3 | S14033 | 阿久和店 | 神奈川県 | 神奈川県横浜市瀬谷区阿久和西一丁目 |
4 | S13051 | 板橋大原店 | 東京都 | 東京都板橋区大原町 |
5 | S14036 | 相模原中央店 | 神奈川県 | 神奈川県相模原市中央二丁目 |
6 | H13015 | 南砂店 | 東京都 | 東京都江東区南砂二丁目 |
ある飲食店の店舗データということにします。
例として、prefectureの値をコード値に変換するという課題があったとします。値は千葉県を12、東京都を13、神奈川県を14と設定します。
方法としては以下のフローになります。
- 置換する文字列を指定 →
.str[0:3]
- 辞書形式で対応するコード値を設定する →
map()
1. 置換する文字列を指定
県名に対応させてコード値を置換するために文字列を指定して県名を抽出する必要があります。文字列を指定して抽出する際には.str
を用います。そして、千葉県、東京都、神奈川県は全て最初の3文字を指定すれば県名の判別ができることがわかります。
指定のやり方として、.str[0:3]
とすればOK。
2. 辞書形式で対応するコード値を設定する
どれをどれに置換するのかはmapメソッド内に辞書形式で指定することで簡単に置換できます。
.map({'.strで抽出した文字列': '置換したい文字列'})
実行例
df['prefecture'] = df['prefecture'].str[0:3].map({'千葉県': '12', '東京都': '13', '神奈川': '14'})
df
実行結果
store_cd | store_name | prefecture | address | |
---|---|---|---|---|
0 | S12014 | 千草台店 | 12 | 千葉県千葉市稲毛区千草台一丁目 |
1 | C13002 | 国分寺店 | 13 | 東京都国分寺市本多二丁目 |
2 | C14010 | 菊名店 | 14 | 神奈川県横浜市港北区菊名一丁目 |
3 | S14033 | 阿久和店 | 14 | 神奈川県横浜市瀬谷区阿久和西一丁目 |
4 | S13051 | 板橋大原店 | 13 | 東京都板橋区大原町 |
5 | S14036 | 相模原中央店 | 14 | 神奈川県相模原市中央二丁目 |
6 | H13015 | 南砂店 | 13 | 東京都江東区南砂二丁目 |
このように県名を置換することができました。(ここの数字は数値ではなく文字列であることに注意)
まとめ
今回は、Pandasのdataframe内の値を置換する方法をmapメソッドを用いて整理しました。再度まとめます。
df['指定した列名'].map({'.strで抽出した文字列': '置換したい文字列'})
dataframe内の置換にはmap
メソッドの他にreplace
メソッドが使用できます。
map
メソッドは特定の列に対して要素ごとの変換を行うのに対し、replace
メソッドはdataframe全体または特定の列に対して特定の値を別の値で置換するために使用されます。
それぞれ少し違いがあるので、ここはまた別の記事で整理しようと思います。とりあえず今回はmapメソッドについて整理しました。