こんにちは、インストラクターのフクロウです。この記事ではデータフレームから行や列をまるごと削除する機能、dropメソッドを紹介します。pandas.DataFrame.dropメソッドを使うことで
- 列や行を指定して削除
- 複数行(列)を指定して削除
などが簡単にできますよ。簡単なのでこの記事で使い方を覚えちゃいましょう!
DataFrameからデータを削除する方法
DataFrameからデータを削除する方法は主に2種類。
- delステートメント
- dropメソッド
これらを使って削除ができます。delはPythonのステートメント(文)ですね。dropの方はDataFrameのメソッドで、これを使うことで行や列を指定して削除することができます。
この記事では2つ目の方、dropメソッドを解説していきます!
dropの使い方
データの準備
まずはデータを準備しましょう。いつもどおりiris datasetを使っていきます。
# まずはライブラリをimport
import numpy as np
import pandas as pd
from sklearn.datasets import load_iris
# iris datasetをsklearnから読み込みましょう
iris = load_iris()
df = pd.DataFrame(iris.data, columns=iris.feature_names)
df["label"] = [iris.target_names[i] for i in iris.target]
df.head(10)
df.shape
dropで行を削除する
例えばこのデータフレームで、「3行目がいらない!」とか「140~145行目がいらない!」と行った場合を考えてみます。一行だけ削除する場合は数字をそのまま引数に、複数行を指定する場合はリストで削除したいところを指定してあげればOKです。
droped_df = df.drop(3) # まずは3行目だけを削除!
droped_df.head(10)
droped_df = df.drop(range(140,146)) # まずは140~145行目だけを削除!
droped_df.tail(10) # tailで後ろから数行を表示
dropで列を削除する
データ解析をするときに、行が一つのデータを示して、列が特徴を示している場合を考えてください。解析に不要な特徴量を削除したい場合、データフレームの列を削除する必要がありますね。
こんな時はdropのパラメータaxisをaxis=1とすることで、列を削除することができます!
droped_df = df.drop("label", axis=1) # label列だけ削除 ... 複数列の場合はリストに。
droped_df.head(10)
オリジナルのデータフレームを変更する
他のDataFrameのメソッドと同じく、dropメソッドもそのままではオリジナルのデータフレームを変更しません。
# 元のデータフレームの中身を確認
df.head(10)
# もしも変更されていればlabel列がないはずだが...
もしもオリジナルのデータフレーム自体から要素を削除したい場合は、inplace=Trueとすることでオリジナルを変更できます。
df.drop(["label", "sepal length (cm)"], # 削除したい列を指定
axis=1, # axis=1で列を指定
inplace=True # Trueで破壊的変更(オリジナルを変更)
)
df.head(10)
まとめ
この記事では、DataFrameから要素を行や列の要素を削除するメソッド、df.dropを紹介しました。データ解析に必要な特徴を取捨選択するときに、DataFrameから不要なものを削除していくような処理が必要になります。
dropを使えば柔軟にデータフレームからの要素削除ができます。引数も他のpandasの関数と似たものが多いので、法則性さえわかれば知らない関数が出てきても対応ができそうですね。