Pandas 基于列上施加的某个条件删除数据帧中的行
在本文中,我们将讨论从数据帧中基于一个或多个条件删除行的不同方法。这些条件将应用于列上,并相应地删除行。我们将使用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
现在我们已经创建了数据框,让我们讨论根据条件删除行的不同方法。
对单独的列应用条件
我们将对特定列应用条件,并相应地删除行。数据选择取决于我们想要生成的数据框的类型。让我们看看代码的工作方式-
示例
- 在创建数据框之后,我们使用数据向量化技术来过滤数据框并保留满足传递条件的选择性信息。
-
我们仅选择了“ 薪水 ”列大于“ 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()”函数来删除行。最后,我们为数据框创建了一个评分系统。