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

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

Python:DataFrameのデータを削除してみる inplaceについて

先日の↓

rafu.hatenablog.jp

続きです。

dfについての確認

昨日のプログラミンングで使った
dfとdf_newについてのおさらい。

import pandas as pd

data = {"name":["aaa","bbb","ccc"],"age":["18","20","22"],"add":["Tokyo","Osaka","Nagoya"]}

#dfにdataをいれる
df = pd.DataFrame(data)

#df_newにdfの"age"行を削除したものをいれる
df_new = df.drop("age",axis = "columns")

このプログラムを実行すると、
dfには下のようなデータが入っています。

name age add
0 aaa 18 Tokyo
1 bbb 20 Osaka
2 ccc 22 Nagoya

df_newにはdfから"age"行を削除したデータが入っています。

name add
0 aaa Tokyo
1 bbb Osaka
2 ccc Nagoya

プログラムでdf_new = df.drop("age",axis = "columns")と書きましたが、
dfの値自体には何も変化はなく、"age"列が削除されたものは返り値(今回の場合はdf_new)として返ります。

inplaceを使うとどうなる?

次に以下のようなプログラムを書いてみます。 先ほどのプログラムとの違いはdropのところにinplaceを追加しました。

import pandas as pd

data = {"name":["aaa","bbb","ccc"],"age":["18","20","22"],"add":["Tokyo","Osaka","Nagoya"]}

#dfにdataをいれる
df = pd.DataFrame(data)

#df_newにdfの"age"行を削除したものをいれる
#今回はここにinplaceを追加する!
df_new = df.drop("age",axis = "columns",inplace = True)

これを実行すると、dfの結果は以下のようになります。

name add
0 aaa Tokyo
1 bbb Osaka
2 ccc Nagoya

また、df_newには何もデータが入っていません。

これよりinplaceを使うと元データ側(df)の"age"を削除し、
返り値(df_new)には何も返さないということがわかります。

結論

元データから完全にデータ(今回だと"age"列)を削除したい場合はinplaceを指定する。
完全にデータを削除しては困る場合は、

  • inplaceを使わない
  • 元データ(df)を一度別のDataFrameにコピーをしてから作業を行う。

といったことをしたほうがいいと思います。

<最終更新日:2021/08/15>

2021/08/15 投稿