らふのプログラミングメモ

プログラミングメモです。

DataFrameの値の取り扱い方法 データを置き換える

DataFrameのデータの中で、欠損値ではないけど
あきらかにデータに変な値が入っている・・・。
そんなことがあった場合の処理について、今回はまとめていきたいと思います。

パネル:DataFrameのデータの値を置き換えてみよう
異常値ってあるでしょ?そのデータを一括で置き換えちゃおう!

まずは下準備

前回と同じテストデータを使いたいと思います。

国語や英語などのテスト結果をイメージしてみてください。
-999という値は欠損値ではないけれど、おかしな点数ですよね。
こういったあきらかにおかしな値を置き換える処理を行っていきたいと思います。

Japanese English math Science social studies
100 -999 90 -999 90
-999 80 85 -999 80
80 92 90 90 85
-999 90 88 100 -999
90 88 -999 90 -999

まずは実際にデータをDataFrameにいれてみよう

import pandas as pd

data = {"Japanese":[100,-999,80,-999,90],"English":[-999,80,92,90,88],"math":[90,85,90,88,-999],"Science":[-999,-999,90,100,90],"social studies":[90,80,85,-999,-999]}

df = pd.DataFrame(data)

print(df)

dfの結果:

Japanese English math Science social studies
0 100 -999 90 -999 90
1 -999 80 85 -999 80
2 80 92 90 90 85
3 -999 90 88 100 -999
4 90 88 -999 90 -999

-999点を修正していこう!

-999点を0点に修正していきたいと思います。

df2 = df.replace(-999,0)

print(df2)

df2の結果:

Japanese English math Science social studies
0 100 0 90 0 90
1 0 80 85 0 80
2 80 92 90 90 85
3 0 90 88 100 0
4 90 88 0 90 0

これで-999点が0点に変更されました。

今回は-999点のみが置き換え用のデータでしたが、 1つの処理で複数のデータを置き換えることも可能です。

例えば

df3 = df.replace([92,100],"合格")

とすれば、92点と100点のところが「合格」という言葉に置き換えられます。

Japanese English math Science social studies
0 合格 -999 90 -999 90
1 -999 80 85 -999 80
2 80 合格 90 90 85
3 -999 90 88 合格 -999
4 90 88 -999 90 -999

また、以下のように-999点を0点、100点と合格という置き換えを同時に行うことも可能です。

df4 = df.replace([-999,100],[0,"合格"])

#このように書くことも可能です。←こっちのほうが見やすいかな?
df5 = df.replace({-999:0,100:"合格"})

df4とdf5の結果

Japanese English math Science social studies
0 合格 0 90 0 90
1 0 80 85 0 80
2 80 合格 90 90 85
3 0 90 88 合格 0
4 90 88 0 90 0

このように、一度に複数のデータを同時に置き換えることも可能です。


<最終更新日:2021/10/08>
2021/10/08 投稿