根据特定列上的条件删除数据框中的行


在本文中,我们将讨论根据一个或多个条件从数据框中删除行的不同方法。这些条件将应用于列,并相应地删除行。我们将使用 Pandas 创建数据框,因为它提供了多种操作数据框的功能。

我们还将创建一个数据集,作为数据框的参考,尽管创建数据集不是强制性的,我们也可以使用 CSV 文件或任何其他文档。Pandas 支持多种文件类型,包括:“CSV”、“JSON”、“HTML”、“SQL”、“EXCEL”等。这使得 Pandas 成为一个非常强大且灵活的编程工具。让我们创建一个 Pandas 数据框。

创建 Pandas 数据框

我们将创建一个包含不同球员资料及其评分的数据框。数据将以表格形式排列(按行和列)。

示例

  • 在以下示例中,我们导入了 Pandas 库并创建了一个字典数据集。

  • 我们将数据集作为“.DataFrame”方法的参数传递,以创建一个 Pandas 数据框。

import pandas as pd

dataset = {"Player name": ["Drake", "John", "Sergio", "Adam"], "Position": ["Striker", "Defender", "Midfielder", "Goal Keeper"], "Rating": [8.2, 7.1, 9.0, 8.4], "Salary": [250000, 450000, 900000, 500000]}

dataframe = pd.DataFrame(dataset, index= [1, 2, 3, 4])
print("The original data frame is like: -")
print(dataframe)

输出

The original data frame is like: -
  Player name     Position  Rating  Salary
1       Drake      Striker     8.2  250000
2        John     Defender     7.1  450000
3      Sergio   Midfielder     9.0  900000
4        Adam  Goal Keeper     8.4  500000

现在我们已经创建了数据框,让我们讨论根据条件删除行的不同方法。

在单个列上应用条件

我们将对特定列应用条件并相应地删除行。数据选择取决于我们想要生成的数据框的类型。让我们看看代码是如何工作的 -

示例

  • 在创建数据框之后,我们使用数据向量化技术来过滤数据框并保留满足传递条件的选择性信息。

  • 我们只选择了“Salary”列大于“400000”的行,并创建了一个新的数据框。

  • 通过这种方式,我们删除了薪资值小于“400000”的行。

import pandas as pd

dataset = {"Player name": ["Drake", "John", "Sergio", "Adam"], "Position": ["Striker", "Defender", "Midfielder", "Goal Keeper"], "Rating": [8.2, 7.1, 9.0, 8.4], "Salary": [250000, 450000, 900000, 500000]}

dataframe = pd.DataFrame(dataset, index= [1, 2, 3, 4])
print("The original data frame is like: -")
print(dataframe)

#including player with salary more than 400000
new_dataframe = dataframe[dataframe["Salary"] > 400000]
print("The new data frame after applying condition")
print(new_dataframe)

输出

The original data frame is like: -
  Player name     Position  Rating  Salary
1       Drake      Striker     8.2  250000
2        John     Defender     7.1  450000
3      Sergio   Midfielder     9.0  900000
4        Adam  Goal Keeper     8.4  500000
The new data frame after applying condition
  Player name     Position  Rating  Salary
2        John     Defender     7.1  450000
3      Sergio   Midfielder     9.0  900000
4        Adam  Goal Keeper     8.4  500000 

在多个列上应用条件以删除行

我们可以对多个列应用多个条件以进行高级数据过滤。对于复杂的数据集,可能存在需要消除不满足特定条件的一系列值的情况。

示例

  • 在这里,我们使用了操作数据框的扩展方法。我们检索了“Rating”列值小于 9 且“Salary”列值大于 400000 的行的索引值。

  • 我们使用了“drop()”函数并传递了索引值以删除行。我们通过传递“Inplace =True”子句对原始数据框进行了更改。

  • 最后,我们打印了数据框,其中删除了第 2 行和第 4 行。在此示例中,我们创建了一个范围,然后相应地删除了行。

import pandas as pd

dataset = {"Player name": ["Drake", "John", "Sergio", "Adam"], "Position": ["Striker", "Defender", "Midfielder", "Goal Keeper"], "Rating": [8.2, 7.1, 9.0, 8.4], "Salary": [250000, 450000, 900000, 500000]}

dataframe = pd.DataFrame(dataset, index= [1, 2, 3, 4])
print("The original data frame is like: -")
print(dataframe)

#Obtaining index values and dropping rows
index_values = dataframe[(dataframe["Rating"] < 9) & (dataframe["Salary"] > 400000)].index
dataframe.drop(index_values, inplace= True)
print("After appling conditions on multiple columns we get: -")
print(dataframe)

输出

The original data frame is like: -
  Player name     Position  Rating  Salary
1       Drake      Striker     8.2  250000
2        John     Defender     7.1  450000
3      Sergio   Midfielder     9.0  900000
4        Adam  Goal Keeper     8.4  500000
After appling conditions on multiple columns we get: -
  Player name    Position  Rating  Salary
1       Drake     Striker     8.2  250000
3      Sergio  Midfielder     9.0  900000 

创建评分系统并删除行

现在,我们将创建一个评分系统,其中低于“limiting”评分值的球员将从数据框中删除。

示例

import pandas as pd

dataset = {"Player name": ["Drake", "John", "Sergio", "Adam", "Nick"], "Position": ["Striker", "Defender", "Midfielder", "Goal Keeper", "Defender"], "Rating": [8.2, 7.1, 9.0, 8.4, 9], "Salary": [250000, 450000, 900000, 500000, 560000]}

dataframe = pd.DataFrame(dataset, index= [1, 2, 3, 4, 5])
print("The original data frame is like: -")
print(dataframe)
player_name = dataframe.loc[(dataframe["Position"] == "Defender") & (dataframe["Rating"] < 8)]
index_value = dataframe.loc[(dataframe["Position"] == "Defender") & (dataframe["Rating"] < 8)].index

print("This player's: ")
print(player_name)

print("Performance is poor, dropping it from the dataframe")
dataframe.drop(index_value, inplace= True)
print(dataframe)

输出

The original data frame is like: -
  Player name     Position  Rating  Salary
1       Drake      Striker     8.2  250000
2        John     Defender     7.1  450000
3      Sergio   Midfielder     9.0  900000
4        Adam  Goal Keeper     8.4  500000
5        Nick     Defender     9.0  560000
This player's: 
  Player name  Position  Rating  Salary
2        John  Defender     7.1  450000
Performance is poor, dropping it from the dataframe
  Player name     Position  Rating  Salary
1       Drake      Striker     8.2  250000
3      Sergio   Midfielder     9.0  900000
4        Adam  Goal Keeper     8.4  500000
5        Nick     Defender     9.0  560000

我们使用“loc”和“.index”方法选择“Rating”小于 8 的行,并将其从数据框中删除。

结论

在本文中,我们通过在数据框的单个和多个列上应用条件来删除行。我们对数据进行了向量化,并使用“drop()”和“loc()”函数来删除行。最后,我们为数据框创建了一个评分系统。

更新于: 2023年5月5日

1K+ 阅读量

开启你的 职业生涯

通过完成课程获得认证

立即开始
广告