LoginSignup
0
3

【Pandas基礎】mapメソッドを使ってdataframe内の値を置換する

Posted at

はじめに

自己紹介

Python勉強中の大学院生です。自分が詰まったところを記録していきます。

記事を書くに至った経緯

pandasのデータフレーム内の値をmapメソッドを使って置換するやり方を整理できていなかったので、メモとしてここに残します。

本記事の概要

どんな人に読んでほしいか

  • Pythonのpandasを学び始めた人
  • pandasのmap関数について知りたい人
  • dataframe内の値を置換する方法がわからない人

この記事に書くこと、わかること

map関数を使ったdataframe内の値の置換方法がわかります。今回整理する具体的なメソッドは以下です。

  • .map()

具体的な方法

例として以下のデータを使用します。(データサイエンス100本ノックの問題を参考にしています)

dataframeの作成
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と設定します。

方法としては以下のフローになります。

  1. 置換する文字列を指定 → .str[0:3]
  2. 辞書形式で対応するコード値を設定する → 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メソッドについて整理しました。

参考サイト

0
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
3