どうも!僕です!
つか〇です!
「この行,いらんわー」
「あの列,いらんわー」
「どうやって削除するねん!!」
なんて悩みは「dropメソッド」で解決できます.
ただdropメソッドの紹介ではなく,同じ削除機能を持った「del」との違いについても紹介していきます.
delについてはこちらでも触れています.
復習がてら参考にしてください.
dropメソッド
シリーズでのdrop
シリーズでもデータフレームもdropメソッドの使い方は大きく変わりませんが,わかりやすく分けて紹介します.
まず,シリーズを作りましょう!!
import pandas as pd
import numpy as np
obj = pd.DataFrame(np.arange(5.), index=["O", "H", "N", "K", "Y"])
obj
0
O 0.0
H 1.0
N 2.0
K 3.0
Y 4.0
このシリーズに対して,dropメソッドを使って「N」を削除してみましょう.
obj.drop("N")
0
O 0.0
H 1.0
K 3.0
Y 4.0
Nだけ消えましたね.
ただ,これだけだと,元のobjを呼び出すとNは消えていません.
obj
0
O 0.0
H 1.0
N 2.0
K 3.0
Y 4.0
削除したデータを保存したい場合は,新しく変数に格納する必要があります.
obj2 = obj.drop("N")
obj2
0
O 0.0
H 1.0
K 3.0
Y 4.0
このようにすれば,削除したデータも使用することができます.
また,別の方法として,「オブジェクト」を「インプレース(inplace)」する方法があります.
何を言ってるかというと,シリーズ(またはデータフレーム)という「オブジェクト」を直接「置き換える(inplace)」ことです.
実際に確認してみましょう.
obj.drop("N", inplace=True)
obj
0
O 0.0
H 1.0
K 3.0
Y 4.0
このように元のシリーズから直接Nが削除されていることがわかりますね.
このinplaceは,削除したものは完全に消えてしまうので,注意しながら扱いましょう!!
ちなみに,複数の行を削除したいときは,指定するものリスト形式で引数に渡しましょう.
obj.drop(["H", "Y"])
0
O 0.0
K 3.0
複数の行も削除できましたね.
データフレームでのdrop
では続いて,データフレームについて見てみましょう!
まずは,データフレームを作成しましょう.
data = pd.DataFrame(np.arange(25).reshape((5, 5)),
index=["Otsu", "Hikone", "Koka", "Maibara", "Nagahama"],
columns=["a", "b", "c", "d", "e"])
data
a b c d e
Otsu 0 1 2 3 4
Hikone 5 6 7 8 9
Koka 10 11 12 13 14
Maibara 15 16 17 18 19
Nagahama20 21 22 23 24
では,こちらのデータフレームから,dropを使って甲賀市と長浜市のデータを削除してみましょう!
(特に甲賀市と長浜市にした意味はありません!甲賀市民の方,長浜市民の方,悪しからず!!)
data.drop(["Koka", "Nagahama"])
a b c d e
Otsu 0 1 2 3 4
Hikone 5 6 7 8 9
Maibara 15 16 17 18 19
長浜市と甲賀市のデータが削除されて,大津市と彦根市,米原市だけが残りましたね.
ここまではシリーズと同じ処理でしたが,データフレームではdropメソッドで列の削除も可能です.
どのようにするかというと,「axis=1」または「axis=”columns”」を引数に渡すと指定した列を削除できます.
data.drop(["b", "e"], axis=1)
a c d
Otsu 0 2 3
Hikone 5 7 8
Koka 10 12 13
Maibara 15 17 18
Nagahama20 22 23
見事,bとeだけ消えて,a,c,eだけ残りましたね.
「axis=”columns”」でも同様の処理が行われます.
data.drop(["b", "e"], axis="columns")
a c d
Otsu 0 2 3
Hikone 5 7 8
Koka 10 12 13
Maibara 15 17 18
Nagahama20 22 23
ここまでできれば,dropメソッドの使い方は完璧です!!
発展編:delとdropの違い
本ブログではdelについても紹介してきました.
「delとdrop,何が違うねん!!」
と思った方もおられると思います.
つか〇も勉強してて思ってました.
簡単に言いますと,
「元のオブジェクトに影響あるかどうか」
です.
どういうことかというと,「del」は元のオブジェクトのデータを書き換えてしまいます.
先にdelについて見てみましょう.
先ほどのデータを別名で作成して,b列を削除します.
data2 = pd.DataFrame(np.arange(25).reshape((5, 5)),
index=["Otsu", "Hikone", "Koka", "Maibara", "Nagahama"],
columns=["a", "b", "c", "d", "e"])
del data2["b"]
data2
a c d e
Otsu 0 2 3 4
Hikone 5 7 8 9
Koka 10 12 13 14
Maibara 15 17 18 19
Nagahama20 22 23 24
見ていただくとわかる通り,data2にはb列が削除され,もうb列は存在しません.
一方で,dropメソッドについては,dropメソッドを使うだけでは,元のオブジェクトは書き換えられません.
data = pd.DataFrame(np.arange(25).reshape((5, 5)),
index=["Otsu", "Hikone", "Koka", "Maibara", "Nagahama"],
columns=["a", "b", "c", "d", "e"])
data.drop("b", axis=1)
data
a b c d e
Otsu 0 1 2 3 4
Hikone 5 6 7 8 9
Koka 10 11 12 13 14
Maibara 15 16 17 18 19
Nagahama20 21 22 23 24
dropメソッドを適用したデータを保存するには,別名の変数を必要とします.
data1 = data.drop("b", axis=1)
data1
a c d e
Otsu 0 2 3 4
Hikone 5 7 8 9
Koka 10 12 13 14
Maibara 15 17 18 19
Nagahama20 22 23 24
また,dropメソッドもある引数をTrueにしておけば,delと同様に元のオブジェクトを書き換えることができます.
それが最初の方に紹介した「inplace」です.
つか〇は元のデータを取っておきたいので,元のデータのコピーを作ってから,delやdropのinplaceを使うか,dropで別名保存するかを推奨ですかね.
まとめ
pandasのシリーズとデータフレームのデータの削除について紹介しました.
これでもう思うがままですね(笑).
もっと詳しく学びたいという方は.「Pythonによるデータ分析入門」をおすすめします.
体系立てて学びたい方にとって,本書は良書だと思います.
一緒にデータの魔術師になって世界を変えていきましょう!!
コメント