pandasを使い始めたとき、あるいはpandasの操作に関連するクエリでウェブサイトをサーフィンしているとき、コードの中に存在するinplaceパラメータにしばしば遭遇します。
inplaceのデフォルト値はFalseに設定されています。
今回は、Dataframeに対して操作を行う際のinplaceパラメータの機能を探ります。
inplace パラメータは何をするのか?
inplace=True`は、元のdfに変更を加えるかどうかに応じて使用されます。
NAエントリーが削除された行を削除する処理を考えてみましょう。
df.dropna(axis = 'index' , how = 'all' , inplace = True )
|
Pandasでは、上のコードのようになります。
- Pandasは元データのコピーを作成します。
-
- そのデータに対して必要な処理を行う。
-
- 結果を元データに代入します。(ここが重要なポイント)。
-
- その後、コピーを削除します。
上記のコードは何も返しませんが、元のDataframeを変更します。
もしinplaceがFalse
に設定されていれば、pandasはDataframeのコピーに操作を加えたものを返します。
Pandasでは、 inplace
パラメータを持つ関数がたくさんあります。
つまり、df.dropna(axis='index', how='all', inplace=True)
とすると、パンダは元のデータフレームを変更したいことを知っているので、元のデータフレームに対して必要な変更を実行します。
この記事もチェック:Pandasのデータフレームに行を追加する5つの簡単な方法
Inplace = True In Action
inplace パラメータの動作をみてみましょう。
ここでは IRIS データセットに対してソート操作を行い、 inplace
パラメータの目的を説明します。
IRISデータセットの読み込みについては、こちらで詳しく解説しています。
# Importing required libraries from sklearn.datasets import load_iris
import pandas as pd
#Loading the dataset data = load_iris(as_frame = True )
df = pd.DataFrame(data.data)
df |
df.sort_values( 'petal length (cm)' , ascending = True ) #inplace by default set to False
|
それでは、花弁の長さ
の特徴量に対してソート処理を実行してみましょう。
|
new_df = df.sort_values( 'petal length (cm)' , ascending = True , inplace = False )
new_df |
それでは、元のデータフレームがどうなったか確認してみましょう。
df.sort_values( 'petal length (cm)' , ascending = True , inplace = True )
|
|
ソートをかけても、印刷すると元のDataframeが表示されるだけでした。
では…何が起こったのでしょうか?
上記の例は、inplaceパラメータの適用を最もよく表しています。
デフォルトでは、このパラメータはFalseに設定されており、このため、この操作は元のDataframeを変更しません。
その代わり、操作が実行されるコピーを返します。
上記のコードでは、返されたDataframeを新しい変数に代入していないため、ソートされた新しいDataframeを取得することができません。
返されたDataframeをnew_dfと名付けた変数に代入しただけです。
これは、元のDataframeのソートされたコピーです。
ここで重要なことは、元のDataframeは指定した変換を行ったものであり、同じものであるということです。
では、inplace = True
とするとどうなるか見てみましょう。
このコードを実行しても何も出力されないように見えますが、ちょっと待ってください…!
元のDataframeを確認すると、inplace = True
が何をしているのか、その本質が見えてきます。
Pythonでinplace=Trueを設定した後、元のDataframeが変更されました。
まとめ
今回はinplaceパラメータについてでした。
このパラメータは気づかないうちに関数の中に入り込んでいることが多いのですが、そのことについて理解することができました。
最後に、inplace=Trueを使うと元のデータフレームが変更されてしまうので、十分注意する必要があります。
それでは、よい学習を
この記事もチェック:PythonでPandasデータフレームの列の順序を変更する4つの方法