【Pandas入門】DataFrameから行や列を削除するdropメソッドの使い方

こんにちは、インストラクターのフクロウです。この記事ではデータフレームから行や列をまるごと削除する機能、dropメソッドを紹介します。pandas.DataFrame.dropメソッドを使うことで

  • 列や行を指定して削除
  • 複数行(列)を指定して削除


などが簡単にできますよ。簡単なのでこの記事で使い方を覚えちゃいましょう!

目次

DataFrameからデータを削除する方法

DataFrameからデータを削除する方法は主に2種類。

  • delステートメント
  • dropメソッド


これらを使って削除ができます。delはPythonのステートメント(文)ですね。dropの方はDataFrameのメソッドで、これを使うことで行や列を指定して削除することができます。

この記事では2つ目の方、dropメソッドを解説していきます!

dropの使い方

データの準備

まずはデータを準備しましょう。いつもどおりiris datasetを使っていきます。

In [1]:
# まずはライブラリを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)
Out[1]:
sepal length (cm) sepal width (cm) petal length (cm) petal width (cm) label
0 5.1 3.5 1.4 0.2 setosa
1 4.9 3.0 1.4 0.2 setosa
2 4.7 3.2 1.3 0.2 setosa
3 4.6 3.1 1.5 0.2 setosa
4 5.0 3.6 1.4 0.2 setosa
5 5.4 3.9 1.7 0.4 setosa
6 4.6 3.4 1.4 0.3 setosa
7 5.0 3.4 1.5 0.2 setosa
8 4.4 2.9 1.4 0.2 setosa
9 4.9 3.1 1.5 0.1 setosa
In [2]:
df.shape
Out[2]:
(150, 5)

dropで行を削除する

例えばこのデータフレームで、「3行目がいらない!」とか「140~145行目がいらない!」と行った場合を考えてみます。一行だけ削除する場合は数字をそのまま引数に、複数行を指定する場合はリストで削除したいところを指定してあげればOKです。

In [3]:
droped_df = df.drop(3) # まずは3行目だけを削除! 

droped_df.head(10)
Out[3]:
sepal length (cm) sepal width (cm) petal length (cm) petal width (cm) label
0 5.1 3.5 1.4 0.2 setosa
1 4.9 3.0 1.4 0.2 setosa
2 4.7 3.2 1.3 0.2 setosa
4 5.0 3.6 1.4 0.2 setosa
5 5.4 3.9 1.7 0.4 setosa
6 4.6 3.4 1.4 0.3 setosa
7 5.0 3.4 1.5 0.2 setosa
8 4.4 2.9 1.4 0.2 setosa
9 4.9 3.1 1.5 0.1 setosa
10 5.4 3.7 1.5 0.2 setosa
In [4]:
droped_df = df.drop(range(140,146)) # まずは140~145行目だけを削除!

droped_df.tail(10) # tailで後ろから数行を表示
Out[4]:
sepal length (cm) sepal width (cm) petal length (cm) petal width (cm) label
134 6.1 2.6 5.6 1.4 virginica
135 7.7 3.0 6.1 2.3 virginica
136 6.3 3.4 5.6 2.4 virginica
137 6.4 3.1 5.5 1.8 virginica
138 6.0 3.0 4.8 1.8 virginica
139 6.9 3.1 5.4 2.1 virginica
146 6.3 2.5 5.0 1.9 virginica
147 6.5 3.0 5.2 2.0 virginica
148 6.2 3.4 5.4 2.3 virginica
149 5.9 3.0 5.1 1.8 virginica

dropで列を削除する

データ解析をするときに、行が一つのデータを示して、列が特徴を示している場合を考えてください。解析に不要な特徴量を削除したい場合、データフレームの列を削除する必要がありますね。

こんな時はdropのパラメータaxisをaxis=1とすることで、列を削除することができます!

In [5]:
droped_df = df.drop("label", axis=1) # label列だけ削除 ... 複数列の場合はリストに。

droped_df.head(10)
Out[5]:
sepal length (cm) sepal width (cm) petal length (cm) petal width (cm)
0 5.1 3.5 1.4 0.2
1 4.9 3.0 1.4 0.2
2 4.7 3.2 1.3 0.2
3 4.6 3.1 1.5 0.2
4 5.0 3.6 1.4 0.2
5 5.4 3.9 1.7 0.4
6 4.6 3.4 1.4 0.3
7 5.0 3.4 1.5 0.2
8 4.4 2.9 1.4 0.2
9 4.9 3.1 1.5 0.1

オリジナルのデータフレームを変更する

他のDataFrameのメソッドと同じく、dropメソッドもそのままではオリジナルのデータフレームを変更しません。

In [6]:
# 元のデータフレームの中身を確認
df.head(10)
# もしも変更されていればlabel列がないはずだが...
Out[6]:
sepal length (cm) sepal width (cm) petal length (cm) petal width (cm) label
0 5.1 3.5 1.4 0.2 setosa
1 4.9 3.0 1.4 0.2 setosa
2 4.7 3.2 1.3 0.2 setosa
3 4.6 3.1 1.5 0.2 setosa
4 5.0 3.6 1.4 0.2 setosa
5 5.4 3.9 1.7 0.4 setosa
6 4.6 3.4 1.4 0.3 setosa
7 5.0 3.4 1.5 0.2 setosa
8 4.4 2.9 1.4 0.2 setosa
9 4.9 3.1 1.5 0.1 setosa

もしもオリジナルのデータフレーム自体から要素を削除したい場合は、inplace=Trueとすることでオリジナルを変更できます。

In [7]:
df.drop(["label", "sepal length (cm)"],  # 削除したい列を指定
        axis=1,                          # axis=1で列を指定    
        inplace=True                   # Trueで破壊的変更(オリジナルを変更)
       )

df.head(10)
Out[7]:
sepal width (cm) petal length (cm) petal width (cm)
0 3.5 1.4 0.2
1 3.0 1.4 0.2
2 3.2 1.3 0.2
3 3.1 1.5 0.2
4 3.6 1.4 0.2
5 3.9 1.7 0.4
6 3.4 1.4 0.3
7 3.4 1.5 0.2
8 2.9 1.4 0.2
9 3.1 1.5 0.1

まとめ

この記事では、DataFrameから要素を行や列の要素を削除するメソッド、df.dropを紹介しました。データ解析に必要な特徴を取捨選択するときに、DataFrameから不要なものを削除していくような処理が必要になります。

dropを使えば柔軟にデータフレームからの要素削除ができます。引数も他のpandasの関数と似たものが多いので、法則性さえわかれば知らない関数が出てきても対応ができそうですね。

この記事を書いた人

第一言語はPythonです。
皆さんRustやりましょう。

目次