Pandas 从数据框中删除包含缺失值或NaN的行

Pandas 从数据框中删除包含缺失值或NaN的行

数据集包含各种各样的值。这些值可以是”字符串”、”整数”、”小数”、”布尔值”,甚至是”数据结构”。这些数据集非常有价值,可以用于各种目的。我们可以用数据集来训练模型、解释结果、产生假设并构建应用程序。

然而,有时数据集中可能包含对我们的目的不必要的值。这些值被称为”NaN”(不是一个数值)。在本文中,我们将处理这些”NaN”或缺失值。

我们的目标是从Pandas数据框中删除包含任何”NaN”值的行。我们将使用数据集创建一个数据框,并使用Pandas库的函数来删除行。让我们开始吧。

创建一个带有NaN值的Pandas数据框

Pandas数据框是一种广泛用于数据分析、解释和操作的2D表格形式的数据。它是一个用户友好的框架,可以将数据组织成行和列。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

这里,只有第三行被删除了,因为它只包含“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()”函数的应用。缺失的数据被消除,生成了一个新的数据帧。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程