PandasのDataframeのinplace = Trueとは何なのか?調べてみた

スポンサーリンク

pandasを使い始めたとき、あるいはpandasの操作に関連するクエリでウェブサイトをサーフィンしているとき、コードの中に存在するinplaceパラメータにしばしば遭遇します。

inplaceのデフォルト値はFalseに設定されています。

今回は、Dataframeに対して操作を行う際のinplaceパラメータの機能を探ります。

スポンサーリンク

inplace パラメータは何をするのか?

inplace=True`は、元のdfに変更を加えるかどうかに応じて使用されます。

NAエントリーが削除された行を削除する処理を考えてみましょう。

df.dropna(axis='index', how='all', inplace=True)

Pandasでは、上のコードのようになります。

  1. Pandasは元データのコピーを作成します。
    1. そのデータに対して必要な処理を行う。
    1. 結果を元データに代入します。(ここが重要なポイント)。
    1. その後、コピーを削除します。

上記のコードは何も返しませんが、元のDataframeを変更します。

もしinplaceがFalseに設定されていれば、pandasはDataframeのコピーに操作を加えたものを返します。

Pandasでは、 inplace パラメータを持つ関数がたくさんあります。

つまり、df.dropna(axis='index', how='all', inplace=True)とすると、パンダは元のデータフレームを変更したいことを知っているので、元のデータフレームに対して必要な変更を実行します。

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を取得することができません。

Original Dataframe
Original Dataframe
Output After Sorting
Output After Sorting

返されたDataframeをnew_dfと名付けた変数に代入しただけです。

これは、元のDataframeのソートされたコピーです。

ここで重要なことは、元のDataframeは指定した変換を行ったものであり、同じものであるということです。

では、inplace = Trueとするとどうなるか見てみましょう。

Original Dataframe When Inplace Was At Its Default Value
Original Dataframe When Inplace Was At Its Default Value

このコードを実行しても何も出力されないように見えますが、ちょっと待ってください…!

元のDataframeを確認すると、inplace = Trueが何をしているのか、その本質が見えてきます。

Sorted New Dataframe When Inplace Is Set To False
Sorted New Dataframe When Inplace Is Set To False
Output When Inplace Is Set To True
Output When Inplace Is Set To True

Pythonでinplace=Trueを設定した後、元のDataframeが変更されました。

まとめ

今回はinplaceパラメータについてでした。

このパラメータは気づかないうちに関数の中に入り込んでいることが多いのですが、そのことについて理解することができました。

最後に、inplace=Trueを使うと元のデータフレームが変更されてしまうので、十分注意する必要があります。

それでは、よい学習を

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