( New ) 新連載スタート!2人の会話形式でPythonを学ぶ「週末Pythonゆる講座」はこちら ▶▶

【Python】drop|表の行・列を削除する方法を解説

Pythonのdropで行・列を削除する

dropを使うことでDataFrameのテーブルで必要のない行と列を削除することができます

データを消す方向を明示的に指定する必要があるので注意しましょう

Pythonの行列の削除のイメージ

事前準備

Pandasというデータ解析を実施できるライブラリをインポートします 

import pandas as pd

※サンプルデータ:学校のテストの点数

学校のイメージ
import pandas as pd
# 本サイトから直接データを取得
df = pd.read_html('https://smart-hint.com/student-data/')[0]
df.head()
Python学習のための学校のテストのサンプルデータ

dropの使い方

dropを使うときのポイントはどこを消すかをしっかり示すことです

」を消したい場合は「行名」を指定する必要があり、

」を消したい場合は「列名」を指定する必要があります

そして「行方向」の削除がデフォルトになっているため、「列方向」への削除はaxis=1を指定します

Pythonの行列の削除のイメージ

※データ全体を確認します

df.head()
df.head()

行の削除

Pythonの行の削除のイメージ

①行名を指定して削除

今回は説明の都合上、set_indexを利用し生徒の「名前」をindex(インデックス)としています

まずはデータの中の「高橋」さんを消してみましょう

df = df.set_index('name')
df.drop('高橋')
Pythonのdropを利用した行削除

②行番号を指定して削除

初期設定でインデックスに数値が設定されている場合は、そのまま行番号を指定して削除ができます

※上記ではインデックスに名前が設定されているので、reset_indexでインデックスを解除します

df = df.reset_index()
df.drop(2)
Pythonのdropを利用した行削除

③複数行の削除

続いて複数の行を削除する方法をご紹介します

インデックスにある「佐藤」「高橋」「伊藤」の行を消します

リスト型で名前を指定します

df.drop(['佐藤','高橋','伊藤'])
Pythonのdropを利用した複数の行の削除

また行番号でも同様に削除することもできます

「行番号」からindexを使い「行名」に変換し、指定します

df.drop([1,3,5])

列の削除

Pythonの列の削除のイメージ

①列名を指定して削除

続いて「部活」の列を削除してみます

列の削除はaxisを指定します

df.drop('club',axis=1)
Pythonのdropを利用した列削除

②列番号を指定して削除

行と同じく列番号も列名に変換する必要があります

columnsを使い「列番号」→「列名」を指定しましょう

df.drop(df.columns[3],axis=1)
Pythonのdropを利用した列削除

③複数列の削除

続いて複数列の削除を実施します

こちらも単純に列名を複数記述します

df.drop(['国語','数学','英語'],axis=1)
Pythonのdropを利用した複数列削除

列番号を指定することもできます

同様にcolumnsを利用し「列名」を抽出すして指定します

df.drop(df.columns[[7,8,9]],axis=1)

条件を付けて行を削除する

続いて条件を付けて行を削除する方法をご紹介します

仕組みとしては「条件に当てはまる行を抽出」→「行名を取得」→「削除」という流れです

queryを使い条件を指定します (知らない方は記事をご覧ください)

【Python】query|条件を付けて行を抽出する

野球部の生徒の行を特定し削除する」方法を順を追ってご説明します

まずは部活が野球の行を抽出します

df.query('club=="野球"')
Pythonのqueryを利用した条件

続いてindexを利用し野球部員の「名前」を取得します

df.query('club=="野球"').index
Pythonのqueryを利用した条件付きインデックス

最後にdropを使い行を削除します

上記の式を組み合わせてください

df.drop(df.query('club=="野球"').index)
Pythonのqueryを利用した条件と行削除

パラメータ

おすすめ度を判定:★★★=必須|★★☆=推奨|★☆☆=任意

★★★:labels(ラベル)

df.drop('高橋')
Pythonのqueryを利用した行削除

行か列のラベル名を指定します

複数の場合はリスト型で指定しましょう

★★☆:axis(削除方向)

df.drop('club', axis=1)
Pythonの行列の削除のイメージ

デフォルトではaxis=0となっているため行の削除となります

列を削除したい場合はaxis=1と設定しましょう

※何も記載しないとデフォルトの「0:行の削除」となります

★★☆:inplace(上書き)

df.drop('高橋', inplace=True)

inplaceを「True」と設定することで、データを削除した状態で上書きすることができます

下記と同じ設定ですが、より短い記述になります

df = df.drop('高橋')

★☆☆:index(インデックス)

df.drop(index='高橋')

パラメータとして明示的にindexを設定することができます

利用シーンは後述します

★☆☆:columns(カラム)

df.drop(columns='club')

こちらもパラメータとしてcolumnsを設定することができます

列の削除ですがカラム名を指定しているためaxis=1を設定する必要がありません

そしてindexcolumnsを両方指定することで、「行・列」合わせて削除を実施することができます

df.drop(index='高橋', columns='club')
Pythonのqueryを利用した行列の削除

まとめ

今回はdropを使った行・列の削除の方法についてご紹介してきました

ポイントは行・列のどの方向に削除を実施するかです

条件を設定するqueryと組み合わせることで、利用範囲が広がるのでぜひ使って見てください

お気に入り登録お願いします

コメントを残す

メールアドレスが公開されることはありません。