從 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()”函式的應用。缺失資料被消除,並生成了一個新的資料框。