pandasのデータセット(データフレーム、シリーズ)において、値を置き換える場合、前回の記事で紹介したmapメソッドを使う方法もあるが、もっとシンプルで簡単な方法がある。
それが今回紹介するreplaceメソッドだ。
コンテンツ
シリーズの値を置換する
例えば、以下のようなシリーズがあったとする。
01 02 03 04 05 06 07 08 09 10 11 | import pandas as pd series = pd.Series([ 1. , 2. , - 1. , 3. , - 1. , 4 ]) # 0 1.0 # 1 2.0 # 2 -1.0 # 3 3.0 # 4 -1.0 # 5 4.0 # dtype: float64 |
データの中に負数が存在するが、これをpandasで欠損値として認識できるようNAに置き換えたい。
では用意したシリーズにreplaceメソッドを実行してみよう。
01 02 03 04 05 06 07 08 09 10 | import numpy as np series.replace( - 1 , np.nan, inplace = True ) # 0 1.0 # 1 2.0 # 2 NaN # 3 3.0 # 4 NaN # 5 4.0 # dtype: float64 |
replaceメソッドはデフォルトだと、値を置き換えたデータのコピーが作成されるが、上記例のとおりinplaceオプションにTrueを指定すると、元のオブジェクトが上書きされる。
複数の値を置換する
複数の値を置き換える場合は、第一引数にリストを渡す。
1 2 3 4 5 6 7 8 | series.replace([ - 1 , 1 ], np.nan, inplace = True ) # 0 NaN # 1 2.0 # 2 NaN # 3 3.0 # 4 NaN # 5 4.0 # dtype: float64 |
また、値によって置き換える値を変えたい場合は、引数にディクショナリを渡せば良い。
1 2 3 4 5 6 7 8 | rep = series.replace({ - 1 : np.nan, 1 : 10 }) # 0 10.0 # 1 2.0 # 2 NaN # 3 3.0 # 4 NaN # 5 4.0 # dtype: float64 |
データフレームの値を置換する
データフレームに対してもreplaceメソッドを適用することが可能だ。
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 | import pandas as pd import numpy as np df = pd.DataFrame({ 'name' : [ 'Taro' , 'Jiro' , 'Saburo' ], 'age' : [ 20 , 15 , 0 ]}) # name age # 0 Taro 20 # 1 Jiro 15 # 2 Saburo 0 rep = df.replace( 0 , np.nan) # name age # 0 Taro 20.0 # 1 Jiro 15.0 # 2 Saburo NaN |
シリーズ同様、デフォルトでは置換したデータのコピーが新たに作成される。
特定の列のみに置換を適用する
特定の列に置換を適用したい場合、データフレームのカラム名に対しreplaceメソッドを実行する。
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 | import pandas as pd import numpy as np df = pd.DataFrame({ 'name' : [ 'Taro' , 'Jiro' , 'Saburo' ], 'age' : [ 20 , 15 , 0 ], 'weight' : [ 60 , 0 , 48 ]}) # name age weight # 0 Taro 20 60 # 1 Jiro 15 0 # 2 Saburo 0 48 rep = df.age.replace( 0 , np.nan) # 0 20.0 # 1 15.0 # 2 NaN # Name: age, dtype: float64 |
変数repに、指定した列に置換を適用した結果が代入された。
このrepを元のデータフレームに戻せば、特定の列のみに置換を適用したデータフレームを結果として得ることができる。
1 2 3 4 5 | df[ 'age' ] = rep # name age weight # 0 Taro 20.0 60 # 1 Jiro 15.0 0 # 2 Saburo NaN 48 |
