从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, np.nan, 98, np.nan]}

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

输出结果

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
Python

使用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)
Python

输出结果

原始数据框如下: -
  学生姓名  学号             主修科目     分数
1         Ajay         23.0              数学   57.0
2      Krishna         45.0            物理    NaN
3       Deepak          NaN               文科   98.0
4        Swati         18.0  政治学  NaN
删除行后的数据框如下: -
  学生姓名  学号             主修科目     分数
1         Ajay         23.0              数学   57.0
Python

如果我们不想要一个新的数据框,则可以简单地对现有的数据框进行更改。这可以通过传递“ inplace = True ”子句来实现。

dataframe.dropna(inplace=True)
print("删除行后的数据框如下: -")
print(dataframe)
Python

删除包含“NaN”值的整个行

我们可以将“ how = all ”子句作为“pd.DataFrame”方法的参数传递,仅删除包含所有值为“NaN”的行。

示例

import numpy as np
import pandas as pd

dataset = {"学生姓名": ["Ajay", "Krishna", np.nan, "Swati"], "学号": [23, 45, np.nan, 18],
           "主修科目": ["数学", "物理", np.nan, "政治学"], "分数": [57, 25, np.nan, np.nan]}

dataframe = pd.DataFrame(dataset, index= [1, 2, 3, 4])
print("原始数据框如下: -")
print(dataframe)

dataframe.dropna(how= "all", inplace= True)
print("删除行后的数据框如下: -")
print(dataframe)
Python

输出

学生姓名    学号             主修科目     分数
1         Ajay         23.0              数学   57.0
2      Krishna         45.0            物理   25.0
3         NaN          NaN                NaN    NaN
4        Swati         18.0   政治学  NaN
删除行后的数据框如下: -
  学生姓名  学号             主修科目     分数
1         Ajay         23.0              数学   57.0
2      Krishna         45.0            物理   25.0
4        Swati         18.0   政治学  NaN
Python

这里,只有第3行被删除,因为它只包含“NaN”值。我们也可以应用条件来删除“NaN”值,但这取决于程序员的目的和他/她希望如何结构化数据框。

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

这是一种间接删除具有缺失值的行的方法。假设我们不知道数据框中有多少个“NaN”值。在这种情况下,我们将创建一个通用程序来检查每个列。

示例

我们使用填充fillna()函数将所有的“NaN”值替换为1。这之后,我们使用“.index”方法来检索包含1的列的索引值。假设我们不知道有多少列包含多少个“NaN”值,我们将包含所有列。我们使用drop()函数并传递一个索引值列表来删除行。

import numpy as np
import pandas as pd

dataset = {"学生姓名": ["Ajay", "Krishna", "Deepak", "Swati"], "学号": [23, 45, np.nan, 18],
           "主修科目": ["数学", "物理", "文科", "政治学"], "分数": [57, np.nan, 98, np.nan]}

dataframe = pd.DataFrame(dataset, index= [1, 2, 3, 4])
print("原始数据框如下: -")
print(dataframe)

dataframe.fillna(1, inplace= True)
index_values = dataframe[(dataframe["学生姓名"] == 1) | (dataframe["学号"] == 1) |
               (dataframe["主修科目"] == 1) | (dataframe["分数"] == 1)].index

dataframe.drop(index_values, inplace=True)
print("删除行后的数据框如下: -")
print(dataframe)
Python

输出

原始数据表是:-
  学生姓名    学号    主科目        分数
1   Ajay   23.0     数学         57.0
2   Krishna 45.0   物理学          NaN
3   Deepak   NaN     艺术         98.0
4   Swati   18.0   政治学           NaN
删除行后的数据表是:-
  学生姓名    学号    主科目        分数
1   Ajay   23.0     数学         57.0
Python

结论

本文讨论了从Pandas数据表中删除包含NaN值的行的基本操作。我们准备了一个适当的数据集,并使用Numpy库在数据集中包含“ NaN”值。我们了解了“dropna()”函数的应用,消除了缺失的数据并生成了一个新的数据表。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

登录

注册