[Python] Pandas – drop関数の使い方【行・列の削除】
Pandasのdrop関数
は、データフレームから特定の行や列を削除するために使用されます。
行を削除する場合はaxis=0
、列を削除する場合はaxis=1
を指定します。
inplace=True
を指定すると、元のデータフレームが直接変更されます。
行を削除する際は行ラベル、列を削除する際は列ラベルを指定します。
例えば、df.drop('列名', axis=1)
で列を削除し、df.drop(行ラベル)
で行を削除します。
Pandasのdrop関数とは
Pandasのdrop関数
は、データフレームから特定の行や列を削除するための非常に便利なメソッドです。
データの前処理やクリーニングを行う際に、不要なデータを取り除くために頻繁に使用されます。
drop関数の基本的な役割
drop関数
は、指定した行または列をデータフレームから削除します。
基本的な構文は以下の通りです。
import pandas as pd
# サンプルデータフレームの作成
data = {
'A': [1, 2, 3],
'B': [4, 5, 6],
'C': [7, 8, 9]
}
df = pd.DataFrame(data)
# 行を削除
df_dropped_row = df.drop(index=1) # インデックス1の行を削除
print(df_dropped_row)
A B C
0 1 4 7
2 3 6 9
この例では、インデックス1の行が削除され、新しいデータフレームが作成されました。
行と列の削除の違い
drop関数
では、行と列を削除する際に異なる引数を使用します。
行を削除する場合はindex
引数を、列を削除する場合はcolumns
引数を指定します。
以下の表に、行と列の削除の違いを示します。
削除対象 | 引数名 | 使用例 |
---|---|---|
行 | index | df.drop(index=1) |
列 | columns | df.drop(columns='B') |
このように、drop関数
を使うことで、行と列を簡単に削除することができます。
drop関数の引数の概要
drop関数
には、いくつかの重要な引数があります。
主な引数を以下の表にまとめました。
引数名 | 説明 |
---|---|
labels | 削除する行または列のラベル(インデックス) |
axis | 0(行)または1(列)を指定 |
inplace | Trueの場合、元のデータフレームを変更 |
errors | ‘raise'(デフォルト)または’ignore’を指定 |
これらの引数を適切に使用することで、drop関数
をより効果的に活用できます。
行を削除する方法
Pandasのdrop関数
を使用して、データフレームから行を削除する方法について詳しく解説します。
行を削除する基本的な使い方
行を削除する基本的な方法は、drop関数
のindex
引数を使用することです。
以下のサンプルコードでは、インデックス0の行を削除しています。
import pandas as pd
# サンプルデータフレームの作成
data = {
'A': [1, 2, 3],
'B': [4, 5, 6],
'C': [7, 8, 9]
}
df = pd.DataFrame(data)
# 行を削除
df_dropped_row = df.drop(index=0) # インデックス0の行を削除
print(df_dropped_row)
A B C
1 2 5 8
2 3 6 9
この例では、インデックス0の行が削除され、新しいデータフレームが作成されました。
複数の行を削除する方法
複数の行を削除する場合は、index
引数にリストを渡します。
以下の例では、インデックス1と2の行を削除しています。
# 複数の行を削除
df_dropped_rows = df.drop(index=[1, 2]) # インデックス1と2の行を削除
print(df_dropped_rows)
A B C
0 1 4 7
このように、リストを使うことで複数の行を一度に削除できます。
行ラベルを指定して削除する方法
行ラベルを指定して削除することも可能です。
以下の例では、行ラベルを使用して削除しています。
# 行ラベルを指定して削除
df_dropped_label = df.drop(index=df.index[1]) # 行ラベル1を削除
print(df_dropped_label)
A B C
0 1 4 7
2 3 6 9
この方法では、行ラベルを直接指定して削除することができます。
inplace=Trueで元のデータフレームを変更する方法
inplace=True
を指定すると、元のデータフレームが直接変更され、新しいデータフレームは作成されません。
以下の例では、インデックス0の行を削除しています。
# inplace=Trueで元のデータフレームを変更
df.drop(index=0, inplace=True) # インデックス0の行を削除
print(df)
A B C
1 2 5 8
2 3 6 9
このように、inplace=True
を使用することで、元のデータフレームを直接変更できます。
行を削除する際のエラーハンドリング
存在しない行を削除しようとすると、エラーが発生します。
この場合、errors
引数を使用してエラーハンドリングを行うことができます。
以下の例では、errors='ignore'
を指定しています。
# 存在しない行を削除しようとする
df_dropped_error = df.drop(index=[3], errors='ignore') # インデックス3は存在しない
print(df_dropped_error)
A B C
1 2 5 8
2 3 6 9
このように、errors='ignore'
を指定することで、存在しない行を削除しようとしてもエラーが発生せず、元のデータフレームがそのまま保持されます。
列を削除する方法
Pandasのdrop関数
を使用して、データフレームから列を削除する方法について詳しく解説します。
列を削除する基本的な使い方
列を削除する基本的な方法は、drop関数
のcolumns
引数を使用することです。
以下のサンプルコードでは、列Bを削除しています。
import pandas as pd
# サンプルデータフレームの作成
data = {
'A': [1, 2, 3],
'B': [4, 5, 6],
'C': [7, 8, 9]
}
df = pd.DataFrame(data)
# 列を削除
df_dropped_column = df.drop(columns='B') # 列Bを削除
print(df_dropped_column)
A C
0 1 7
1 2 8
2 3 9
この例では、列Bが削除され、新しいデータフレームが作成されました。
複数の列を削除する方法
複数の列を削除する場合は、columns
引数にリストを渡します。
以下の例では、列BとCを削除しています。
# 複数の列を削除
df_dropped_columns = df.drop(columns=['B', 'C']) # 列BとCを削除
print(df_dropped_columns)
A
0 1
1 2
2 3
このように、リストを使うことで複数の列を一度に削除できます。
列ラベルを指定して削除する方法
列ラベルを指定して削除することも可能です。
以下の例では、列ラベルを使用して削除しています。
# 列ラベルを指定して削除
df_dropped_label = df.drop(columns=df.columns[1]) # 列ラベル1を削除(列B)
print(df_dropped_label)
A C
0 1 7
1 2 8
2 3 9
この方法では、列ラベルを直接指定して削除することができます。
inplace=Trueで元のデータフレームを変更する方法
inplace=True
を指定すると、元のデータフレームが直接変更され、新しいデータフレームは作成されません。
以下の例では、列Bを削除しています。
# inplace=Trueで元のデータフレームを変更
df.drop(columns='B', inplace=True) # 列Bを削除
print(df)
A C
0 1 7
1 2 8
2 3 9
このように、inplace=True
を使用することで、元のデータフレームを直接変更できます。
列を削除する際のエラーハンドリング
存在しない列を削除しようとすると、エラーが発生します。
この場合、errors
引数を使用してエラーハンドリングを行うことができます。
以下の例では、errors='ignore'
を指定しています。
# 存在しない列を削除しようとする
df_dropped_error = df.drop(columns=['D'], errors='ignore') # 列Dは存在しない
print(df_dropped_error)
A C
0 1 7
1 2 8
2 3 9
このように、errors='ignore'
を指定することで、存在しない列を削除しようとしてもエラーが発生せず、元のデータフレームがそのまま保持されます。
drop関数の応用例
Pandasのdrop関数
は、基本的な行や列の削除だけでなく、さまざまな応用が可能です。
ここでは、いくつかの応用例を紹介します。
条件に基づいて行を削除する方法
特定の条件に基づいて行を削除するには、まず条件を満たす行をフィルタリングし、その後drop関数
を使用します。
以下の例では、列Aの値が2より大きい行を削除しています。
import pandas as pd
# サンプルデータフレームの作成
data = {
'A': [1, 2, 3, 4],
'B': [5, 6, 7, 8]
}
df = pd.DataFrame(data)
# 条件に基づいて行を削除
df_dropped_condition = df[df['A'] <= 2] # Aが2以下の行を残す
print(df_dropped_condition)
A B
0 1 5
1 2 6
このように、条件を満たす行だけを残すことで、特定の行を削除できます。
特定の値を持つ列を削除する方法
特定の値を持つ列を削除するには、まずその列の値を確認し、条件に合致する列を特定します。
以下の例では、列Bに値が6の列を削除しています。
# 特定の値を持つ列を削除
df_dropped_value = df.loc[:, df.loc[0] != 6] # 0行目が6でない列を残す
print(df_dropped_value)
A B
0 1 5
1 2 6
2 3 7
3 4 8
この方法では、特定の値を持つ列を簡単に削除できます。
重複した行を削除する方法
重複した行を削除するには、drop_duplicatesメソッド
を使用します。
以下の例では、重複した行を削除しています。
# 重複した行を削除
data_with_duplicates = {
'A': [1, 2, 2, 3],
'B': [5, 6, 6, 7]
}
df_duplicates = pd.DataFrame(data_with_duplicates)
df_dropped_duplicates = df_duplicates.drop_duplicates() # 重複行を削除
print(df_dropped_duplicates)
A B
0 1 5
1 2 6
3 3 7
このように、drop_duplicates
を使用することで、重複した行を簡単に削除できます。
インデックスをリセットする方法
行を削除した後、インデックスをリセットするには、reset_indexメソッド
を使用します。
以下の例では、行を削除した後にインデックスをリセットしています。
# インデックスをリセット
df_reset_index = df_dropped_duplicates.reset_index(drop=True) # インデックスをリセット
print(df_reset_index)
A B
0 1 5
1 2 6
2 3 7
drop=True
を指定することで、元のインデックス列を削除できます。
dropnaとの違いと使い分け
drop関数
とdropna関数
は、どちらもデータを削除するためのメソッドですが、削除する対象が異なります。
drop関数
は特定の行や列を指定して削除するのに対し、dropna関数
は欠損値(NaN)を持つ行や列を削除します。
以下の例では、dropna
を使用して欠損値を持つ行を削除しています。
# 欠損値を持つ行を削除
data_with_nan = {
'A': [1, 2, None, 4],
'B': [5, None, 7, 8]
}
df_nan = pd.DataFrame(data_with_nan)
df_dropped_nan = df_nan.dropna() # 欠損値を持つ行を削除
print(df_dropped_nan)
A B
0 1 5.0
このように、drop関数
は特定の行や列を削除するために使用し、dropna関数
は欠損値を持つ行や列を削除するために使用します。
状況に応じて使い分けることが重要です。
drop関数の注意点
Pandasのdrop関数
を使用する際には、いくつかの注意点があります。
ここでは、特に重要なポイントを解説します。
存在しない行・列を削除しようとした場合の挙動
drop関数
で存在しない行や列を削除しようとすると、デフォルトではKeyError
が発生します。
これを避けるためには、errors
引数を使用してエラーハンドリングを行うことができます。
以下の例では、存在しないインデックス3を削除しようとしています。
import pandas as pd
# サンプルデータフレームの作成
data = {
'A': [1, 2, 3],
'B': [4, 5, 6]
}
df = pd.DataFrame(data)
# 存在しない行を削除しようとする
try:
df_dropped_error = df.drop(index=3) # インデックス3は存在しない
except KeyError as e:
print(f"エラー: {e}")
エラー: "['3'] not found in axis"
このように、存在しない行や列を削除しようとするとエラーが発生します。
errors='ignore'
を指定することで、エラーを無視することも可能です。
inplace=Falseのデフォルト動作に注意
drop関数
のデフォルトでは、inplace=False
となっており、新しいデータフレームが返されます。
元のデータフレームは変更されません。
これに注意しないと、意図した通りにデータが削除されないことがあります。
以下の例では、inplace
を指定せずに行を削除しています。
# 行を削除(inplace=Falseのデフォルト動作)
df_dropped = df.drop(index=0) # インデックス0の行を削除
print(df) # 元のデータフレームは変更されていない
A B
0 1 4
1 2 5
2 3 6
元のデータフレームはそのままであるため、意図した結果を得るためにはinplace=True
を指定する必要があります。
drop関数とdel文の違い
drop関数
とdel
文は、どちらもデータフレームから行や列を削除するために使用されますが、動作が異なります。
drop関数
は新しいデータフレームを返すのに対し、del
文は元のデータフレームを直接変更します。
以下の例では、del
文を使用して列Bを削除しています。
# del文を使用して列を削除
del df['B'] # 列Bを削除
print(df)
A
0 1
1 2
2 3
このように、del
文を使用すると、元のデータフレームが直接変更されます。
drop関数
はより柔軟で、エラーハンドリングや複数の行・列の削除が可能です。
drop関数とpop関数の違い
drop関数
とpop関数
も、データフレームから行や列を削除するために使用されますが、pop関数
は削除した列を返します。
以下の例では、pop関数
を使用して列Bを削除し、その値を取得しています。
# pop関数を使用して列を削除
b_column = df.pop('B') # 列Bを削除し、その値を取得
print(df) # 列Bが削除されたデータフレーム
print(b_column) # 削除した列の値
A
0 1
1 2
2 3
0 4
1 5
2 6
Name: B, dtype: int64
このように、pop関数
は削除した列のデータを返すため、削除したデータを後で使用したい場合に便利です。
drop関数
は新しいデータフレームを返すため、元のデータフレームを保持したい場合に適しています。
まとめ
この記事では、Pandasのdrop関数
を使用して行や列を削除する方法について詳しく解説しました。
基本的な使い方から応用例、注意点まで幅広く取り上げ、実際のコード例を通じて具体的な操作方法を紹介しました。
これを機に、データフレームの前処理やクリーニング作業において、drop関数
を積極的に活用してみてください。