Pandas DataFrame の列値に基づいて行を削除する方法

Asad Riaz 2023年1月30日
  1. Pandas DataFrame の列値の行を削除する .drop メソッド
  2. Pandas DataFrame の行を削するための boolean masking メソッドは
Pandas DataFrame の列値に基づいて行を削除する方法

列値の条件に基づいて Pandas DataFrame 行を削除する方法を紹介します。たとえば、.droploc の有無にかかわらず)と boolean masking を使用します。

Pandas DataFrame の列値の行を削除する .drop メソッド

.drop メソッドは列名の単一またはリストを受け入れ、行または列を削除します。行にはパラメータ axis=0 を設定し、列には axis=1 を設定します(デフォルトでは axis=0 です)。Pandas DataFrame の列の値に適用される条件に基づいて、TrueFalse のシリーズを取得することもできます。

コード例:

# python 3.x
import pandas as pd

fruit_list = [
    ("Orange", 34, "Yes"),
    ("Mango", 24, "No"),
    ("banana", 14, "No"),
    ("Apple", 44, "Yes"),
    ("Pineapple", 64, "No"),
    ("Kiwi", 84, "Yes"),
]

# Create a DataFrame object
df = pd.DataFrame(fruit_list, columns=["Name", "Price", "Stock"])
# Get names of indexes for which column Stock has value No
indexNames = df[df["Stock"] == "No"].index
# Delete these row indexes from dataFrame
df.drop(indexNames, inplace=True)
print(df)

出力:

     Name  Price Stock
0  Orange     34   Yes
3   Apple     44   Yes
5    Kiwi     84   Yes

df.drop メソッド内で .loc を使用して同様の結果を取得することもできます。

df.drop(df.loc[df["Stock"] == "Yes"].index, inplace=True)

複数の列の値に基づいて行を削除することもできます。上記の例では、価格が 30 以上、価格が 70 以下の行を削除できます。

コード例:

# python 3.x
import pandas as pd

# List of Tuples
fruit_list = [
    ("Orange", 34, "Yes"),
    ("Mango", 24, "No"),
    ("banana", 14, "No"),
    ("Apple", 44, "Yes"),
    ("Pineapple", 64, "No"),
    ("Kiwi", 84, "Yes"),
]

# Create a DataFrame object
df = pd.DataFrame(fruit_list, columns=["Name", "Price", "Stock"])
indexNames = df[(df["Price"] >= 30) & (df["Price"] <= 70)].index
df.drop(indexNames, inplace=True)
print(df)

出力:

     Name  Price Stock
1   Mango     24    No
2  banana     14    No
5    Kiwi     84   Yes

価格が 30 以上 70 未満の行は削除されました。

Pandas DataFrame の行を削するための boolean masking メソッドは

boolean masking は、列の値に基づいて Pandas DataFrame で行を削除するための最良かつ最も簡単な方法です。

コード例:

# python 3.x
import pandas as pd

# List of Tuples
fruit_list = [
    ("Orange", 34, "Yes"),
    ("Mango", 24, "No"),
    ("banana", 14, "No"),
    ("Apple", 44, "Yes"),
    ("Pineapple", 64, "No"),
    ("Kiwi", 84, "Yes"),
]

# Create a DataFrame object
df = pd.DataFrame(fruit_list, columns=["Name", "Price", "Stock"])
print(df[df.Price > 40])
print("............................")
print(df[(df.Price > 40) & (df.Stock == "Yes")])

出力:

        Name  Price Stock
3      Apple     44   Yes
4  Pineapple     64    No
5       Kiwi     84   Yes
............................
    Name  Price Stock
3  Apple     44   Yes
5   Kiwi     84   Yes

関連記事 - Pandas DataFrame