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

pandaspythonserver side programmingprogramming

数据集由各种各样的值组成。这些值可以是"字符串"、"整数"、"小数"、"布尔值"甚至是"数据结构"。这些数据集非常有价值,可用于各种目的。我们可以在数据集的帮助下训练模型、解释结果、提出假设并构建应用程序。

但是,有时数据集可能包含对我们的目的不必要的值。这些值称为"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("删除行后的数据框:-")
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()"函数的应用。缺失的数据被消除,并生成了一个新的数据框。


相关文章