目次
Pythonのdropで行・列を削除する
dropを使うことでDataFrameのテーブルで必要のない行と列を削除することができます
データを消す方向を明示的に指定する必要があるので注意しましょう
事前準備
Pandasというデータ解析を実施できるライブラリをインポートします
import pandas as pd
※サンプルデータ:学校のテストの点数
import pandas as pd
# 本サイトから直接データを取得
df = pd.read_html('https://smart-hint.com/student-data/')[0]
df.head()
dropの使い方
dropを使うときのポイントはどこを消すかをしっかり示すことです
「行」を消したい場合は「行名」を指定する必要があり、
「列」を消したい場合は「列名」を指定する必要があります
そして「行方向」の削除がデフォルトになっているため、「列方向」への削除はaxis=1を指定します
※データ全体を確認します
df.head()
行の削除
①行名を指定して削除
今回は説明の都合上、set_indexを利用し生徒の「名前」をindex(インデックス)としています
まずはデータの中の「高橋」さんを消してみましょう
df = df.set_index('name')
df.drop('高橋')
②行番号を指定して削除
初期設定でインデックスに数値が設定されている場合は、そのまま行番号を指定して削除ができます
※上記ではインデックスに名前が設定されているので、reset_indexでインデックスを解除します
df = df.reset_index()
df.drop(2)
③複数行の削除
続いて複数の行を削除する方法をご紹介します
インデックスにある「佐藤」「高橋」「伊藤」の行を消します
リスト型で名前を指定します
df.drop(['佐藤','高橋','伊藤'])
また行番号でも同様に削除することもできます
「行番号」からindexを使い「行名」に変換し、指定します
df.drop([1,3,5])
列の削除
①列名を指定して削除
続いて「部活」の列を削除してみます
列の削除はaxisを指定します
df.drop('club',axis=1)
②列番号を指定して削除
行と同じく列番号も列名に変換する必要があります
columnsを使い「列番号」→「列名」を指定しましょう
df.drop(df.columns[3],axis=1)
③複数列の削除
続いて複数列の削除を実施します
こちらも単純に列名を複数記述します
df.drop(['国語','数学','英語'],axis=1)
列番号を指定することもできます
同様にcolumnsを利用し「列名」を抽出すして指定します
df.drop(df.columns[[7,8,9]],axis=1)
条件を付けて行を削除する
続いて条件を付けて行を削除する方法をご紹介します
仕組みとしては「条件に当てはまる行を抽出」→「行名を取得」→「削除」という流れです
queryを使い条件を指定します (知らない方は記事をご覧ください)
【Python】query|条件を付けて行を抽出する「野球部の生徒の行を特定し削除する」方法を順を追ってご説明します
まずは部活が野球の行を抽出します
df.query('club=="野球"')
続いてindexを利用し野球部員の「名前」を取得します
df.query('club=="野球"').index
最後にdropを使い行を削除します
上記の式を組み合わせてください
df.drop(df.query('club=="野球"').index)
パラメータ
おすすめ度を判定:★★★=必須|★★☆=推奨|★☆☆=任意
★★★:labels(ラベル)
df.drop('高橋')
行か列のラベル名を指定します
複数の場合はリスト型で指定しましょう
★★☆:axis(削除方向)
df.drop('club', axis=1)
デフォルトでは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を設定する必要がありません
そしてindexとcolumnsを両方指定することで、「行・列」合わせて削除を実施することができます
df.drop(index='高橋', columns='club')
まとめ
今回はdropを使った行・列の削除の方法についてご紹介してきました
ポイントは行・列のどの方向に削除を実施するかです
条件を設定するqueryと組み合わせることで、利用範囲が広がるのでぜひ使って見てください