根据应用于列的某些条件从数据框中删除行

pythonserver side programmingprogramming更新于 2024/2/24 9:30:00

在本文中,我们将讨论基于一个或多个条件从数据框中删除行的不同方法。这些条件将应用于列,并相应地删除行。我们将使用 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 

创建评分系统并删除行

现在我们将创建一个评分系统,其中评分值低于"限制"的玩家将从数据框中删除。

示例

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()"函数来删除行。最后,我们为数据框创建了一个评级系统。


相关文章