( New ) 新連載スタート!2人の会話形式でPythonを学ぶ「週末Pythonゆる講座」はこちら ▶▶

【Python】replace|データ内容を別の内容で置き換える(置換)

Pythonでデータを置換する

replace()を使うことでデータの中身を変更することができます

Excelなどでは「置換」と呼ばれる作業を、関数を使って実施することができます

そして置換を実施するパターンとしては…

  • 文字を変更する  「テニス部」→「ソフトテニス部」
  • 誤字を修正する  「テニスぶ」→「テニス部」
  • 不要な文字を消す 「テニス部」→「テニス」

置換方法の方針

Pythonの置換には大きく分けて2種類あります

少し分かりにくいので図を使って説明します

  • 文字全部を置換する方法
  • 一部の文字だけ変える方法
Pythonのreplaceのイメージ

基本的には「全ての文字」を変更する設定になっていますが、

regexというパラメータを使うことで「一部の文字」の置換ができます(後述します)

事前準備

Pandas」というデータ解析を実施できるライブラリをインポートします 

import pandas as pd

※サンプルデータ:学校のテストの点数

学校のイメージ
student.head()
学校のテストデータのイメージ

replaceの使い方

置換を実施するにはまず、変数の後にreplace()を記述します

そして「置換前」→「置換後」となるように項目を書いていきます

※今回は「テニス」を「ソフトテニス」に置換してみます

student.replace('テニス','ソフトテニス') 
student.replace('テニス','ソフトテニス') 

また特定の列を指定して置換を実施することもできます

その場合はリスト型で結果で出ます

student['部活'].replace('テニス','ソフトテニス')
student['部活'].replace('テニス','ソフトテニス')

複数の値を置換する方法

複数の項目に対して一度に置換をするには「辞書型」「リスト型」のどちらかを利用します

辞書型の場合はこちら

student.replace({'テニス':'ソフトテニス','野球':'軟式野球'})

「置換前」→「置換後」の間に:コロンを入れて、項目の区切りは,カンマを記載します

student.replace({'テニス':'ソフトテニス','野球':'軟式野球'})

一方で「リスト型」で指定する方法はこちら

student.replace(['テニス','野球'],['ソフトテニス','軟式野球'])

「置換前のリスト」を記述し,カンマで区切り「置換後のリスト」を書きましょう

辞書型とリスト型では記述方法が異なるため注意です


最後のリストを単一にすることで、全て同じ内容に置換されます

テニスと野球を「軟式の部活」とします

student.replace(['テニス','野球'],'軟式の部活')
student.replace(['テニス','野球'],'軟式の部活')

パラメータ

おすすめ度を判定:★★★=必須|★★☆=推奨|★☆☆=任意

★★☆:regex(一部の文字を置換)

regexを「True」で指定することで一部の文字だけ置換することができます

「置換前」に指定した文字が含まれる場合、「置換後」の文字に変わるような設定になります

※正確には正規表現の利用となりますが、細かい説明は割愛します

student.replace('部','Bu',regex=True)
student.replace('部','Bu',regex=True)

少しおかしな設定ですが「部」を「Bu」と変換してみます

★☆☆:inplace(上書き)

student.replace('テニス','ソフトテニス', inplace=True)

inplaceを「True」で設定することで、変換に対して置換後を内容を上書きすることができます

変数に対して上書きしても同じ内容になりますが、inplaceの方が簡単に書けます

※下記では同じ設定になります

student.replace('テニス','ソフトテニス')
student = student.replace('テニス','ソフトテニス')

まとめ

今回はreplace()で置換する方法をご紹介してきました

全ての文字列を置換するのももちろん、一部の文字だけを置換することもできます

データは始めからきれいにそろっているわけではないため

正しく成形するためにreplace()を使ってみてください

お気に入り登録お願いします

コメントを残す

メールアドレスが公開されることはありません。