根據特定列上的條件刪除資料框中的行


在本文中,我們將討論根據一個或多個條件從資料框中刪除行的不同方法。這些條件將應用於列,並相應地刪除行。我們將使用 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+ 閱讀量

開啟你的 職業生涯

透過完成課程獲得認證

立即開始
廣告