从 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()”函数的应用。缺失数据被消除,并生成了一个新的数据框。