HOWTO · Pandas

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

このチュートリアルでは、loc with drop、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