Python, pandasの基礎⑧ ~データフレームの行と列の要素を削除!dropメソッド編~

記事内に広告が含まれています。

どうも!僕です!
つか〇です!

「この行,いらんわー」
「あの列,いらんわー」
「どうやって削除するねん!!」

なんて悩みは「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によるデータ分析入門」をおすすめします.
体系立てて学びたい方にとって,本書は良書だと思います.

一緒にデータの魔術師になって世界を変えていきましょう!!

コメント

タイトルとURLをコピーしました