從 Pandas 資料框中刪除包含缺失值或 NaN 的行


資料集包含各種各樣的值。這些值可以是“字串”、“整數”、“小數”、“布林值”,甚至可以是“資料結構”。這些資料集非常有價值,可以用於各種目的。我們可以藉助資料集來訓練模型、解釋結果、提出假設並構建應用程式。

但是,有時資料集可能包含對我們的目的來說不必要的值。這些值稱為“NaN”(非數字)。在本文中,我們將處理這些“NaN”或缺失值。

我們的目標是從 Pandas 資料框中刪除包含任何“NaN”值的行。我們將藉助資料集建立一個數據框,並使用 Pandas 庫的函式來刪除行。讓我們從主題開始。

建立包含 NaN 值的 Pandas 資料框

Pandas 資料框是資料的二維表格排列,廣泛用於資料分析、解釋和處理。它是一個使用者友好的框架,可以將資料組織成行和列。Pandas 提供了許多函式,允許對資料進行排序、合併、過濾和刪除。讓我們構建一個 Pandas 資料框。

示例

在下面的示例中,我們傳遞了一個字典資料集,其中每個鍵表示一個列標籤,關聯的值透過列表傳遞。

然後,我們透過“pd.DataFrame”方法建立了一個 Pandas 資料框。我們傳遞了一個行標籤列表。在資料集中,我們透過 NumPy 庫分配了一些“NaN”值。

import numpy as np
import pandas as pd

dataset = {"Student name": ["Ajay", "Krishna", "Deepak", "Swati"], "Roll number": [23, 45, np.nan, 18],
           "Major Subject": ["Maths", "Physics", "Arts", "Political science"], "Marks": [57, numpy.nan, 98, numpy.nan]}

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

輸出

The original data frame is: -
  Student name  Roll number      Major Subject  Marks
1         Ajay         23.0              Maths   57.0
2      Krishna         45.0            Physics    NaN
3       Deepak          NaN               Arts   98.0
4        Swati         18.0  Political science    NaN

使用 dropna() 函式刪除包含“NaN”值的行

我們可以使用“dropna()”函式從資料框中刪除行或列。

  • 建立資料框後,我們使用“dropna()”函式刪除所有包含任何“NaN”值的行。

  • 我們建立了一個新的資料框“drop_dataframe”,其中包含修改後的值並打印出來。

  • 這裡,刪除了第 2、3 和 4 行。

示例

import numpy as np
import pandas as pd

dataset = {"Student name": ["Ajay", "Krishna", "Deepak", "Swati"], "Roll number": [23, 45, np.nan, 18],
           "Major Subject": ["Maths", "Physics", "Arts", "Political science"], "Marks": [57, np.nan, 98, np.nan]}

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

drop_dataframe = dataframe.dropna()
print("The data frame after dropping the rows: -")
print(drop_dataframe)

輸出

The original data frame is: -
  Student name  Roll number      Major Subject  Marks
1         Ajay         23.0              Maths   57.0
2      Krishna         45.0            Physics    NaN
3       Deepak          NaN               Arts   98.0
4        Swati         18.0  Political science    NaN
The data frame after dropping the rows: -
  Student name  Roll number       Major Subject  Marks
1         Ajay         23.0              Maths   57.0

如果我們不想要一個新的資料框,我們可以簡單地對現有資料框進行更改。這可以透過傳遞“inplace = True”子句來實現。

dataframe.dropna(inplace=True)
print("The data frame after dropping the rows: -")
print(dataframe)

刪除整行“NaN”值

我們可以將“how = all”子句作為“pd.DataFrame”方法的引數傳遞,以僅刪除所有值為“NaN”的行。

示例

import numpy as np
import pandas as pd

dataset = {"Student name": ["Ajay", "Krishna", np.nan, "Swati"], "Roll number": [23, 45, np.nan, 18],
           "Major Subject": ["Maths", "Physics", np.nan, "Political science"], "Marks": [57, 25, np.nan, np.nan]}

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

dataframe.dropna(how= "all", inplace= True)
print("The data frame after dropping the rows: -")
print(dataframe)

輸出

Student name  Roll number      Major Subject  Marks
1         Ajay         23.0              Maths   57.0
2      Krishna         45.0            Physics   25.0
3          NaN          NaN                NaN    NaN
4        Swati         18.0  Political science    NaN
The data frame after dropping the rows: -
  Student name  Roll number      Major Subject  Marks
1         Ajay         23.0              Maths   57.0
2      Krishna         45.0            Physics   25.0
4        Swati         18.0  Political science    NaN

這裡,只刪除了第 3 行,因為它只包含“NaN”值。我們也可以應用條件來刪除“NaN”值,但這取決於程式設計師的目的以及他/她希望如何構建資料框。

使用 Fillna() 函式和 Drop() 函式

這是一種間接刪除包含缺失值的行的方法。假設我們不知道資料框中存在多少個“NaN”值。在這種情況下,我們將建立一個通用程式來檢查每一列。

示例

我們使用 fillna() 函式將所有“NaN”值替換為 1。之後,我們使用“.index”方法檢索包含 1 的列的索引值。假設我們不知道多少列包含多少個“NaN”值,我們包含了所有列。我們使用了 drop() 函式並傳遞了一個索引值列表來刪除行。

import numpy as np
import pandas as pd

dataset = {"Student name": ["Ajay", "Krishna", "Deepak", "Swati"], "Roll number": [23, 45, np.nan, 18],
           "Major Subject": ["Maths", "Physics", "Arts", "Political science"], "Marks": [57, np.nan, 98, np.nan]}

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

dataframe.fillna(1, inplace= True)
index_values = dataframe[(dataframe["Student name"] == 1) | (dataframe["Roll number"] == 1) |
               (dataframe["Major Subject"] == 1) | (dataframe["Marks"] == 1)].index

dataframe.drop(index_values, inplace=True)
print("The data frame after dropping rows: -")
print(dataframe)

輸出

The original data frame is: -
  Student name  Roll number      Major Subject  Marks
1         Ajay         23.0              Maths   57.0
2      Krishna         45.0            Physics    NaN
3       Deepak          NaN               Arts   98.0
4        Swati         18.0  Political science    NaN
The data frame after dropping rows: -
  Student name  Roll number      Major Subject   Marks
1         Ajay         23.0              Maths    57.0

結論

在本文中,我們討論了從 Pandas 資料框中刪除包含“NaN”值的基本操作。我們準備了一個合適的資料集,並使用 NumPy 庫將“NaN”值包含在我們的資料集中。我們瞭解了“dropna()”函式的應用。缺失資料被消除,並生成了一個新的資料框。

更新於: 2023年5月5日

5K+ 瀏覽量

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告