Pandas

[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引数を指定します。

以下の表に、行と列の削除の違いを示します。

削除対象引数名使用例
indexdf.drop(index=1)
columnsdf.drop(columns='B')

このように、drop関数を使うことで、行と列を簡単に削除することができます。

drop関数の引数の概要

drop関数には、いくつかの重要な引数があります。

主な引数を以下の表にまとめました。

引数名説明
labels削除する行または列のラベル(インデックス)
axis0(行)または1(列)を指定
inplaceTrueの場合、元のデータフレームを変更
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関数を積極的に活用してみてください。

関連記事

Back to top button
目次へ