如何基于 Pandas DataFrame 中的列值删除行

Asad Riaz 2023年1月30日
  1. .drop 方法删除 Pandas DataFrame 中列值的行
  2. 布尔屏蔽方法删除 Pandas DataFrame 中的行
如何基于 Pandas DataFrame 中的列值删除行

我们将介绍通过使用 .drop(带有和不带有 loc)和布尔掩码检查列值的条件来基于 DataFrame 删除行的方法。

.drop 方法删除 Pandas DataFrame 中列值的行

.drop 方法接受一个或一列列名,并删除行或列。对于行,我们设置参数 axis=0,对于列,我们设置参数 axis=1(默认情况下,axis0)。我们还可以得到 TrueFalse 系列列值,根据应用于 Pandas DataFrame 中的条件。

示例代码:

# 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 是基于列值删除 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