Pandas 筛选包含空值(None)的单元格

Pandas 筛选包含空值(None)的单元格

在本文中,我们将介绍如何使用 Pandas 选取具有 None 值(空值)的单元格。有时候,我们需要筛选 DataFrame 或 Series 的某些单元格,这些单元格里没有值,或者是 NaN(Not a Number),或者是 None(Python 内置的空值)。本文将重点介绍如何筛选 None 值的单元格。

阅读更多:Pandas 教程

创建 DataFrame

我们首先需要创建一个 DataFrame 来进行演示。下面的代码将创建一个 4 行 3 列的 DataFrame,包含了 3 个列名为 A、B、C 的列,数据类型都是 float64,每一列都包含一些随机的数。其中有几个地方我们手动把一些单元格设置为了 None。

import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randn(4, 3), columns=['A', 'B', 'C'])
df.iloc[0, 1] = None
df.iloc[1, 2] = None
df.iloc[2, 0] = None

print(df)

输出如下:

          A         B         C
0       NaN -0.658578  0.469717
1 -0.145424  1.061810       NaN
2       NaN -2.180442  0.680336
3  0.443808 -1.912415  0.934723

需要注意的是,我们手动设置的 None 单元格将被 Pandas 解释为 np.nan(NaN),因此我们在输出的 DataFrame 中看到了 NaN 而不是 None。

选取包含 None 值的单元格

我们可以使用 Pandas 的 isna() 函数选取 DataFrame 中包含 None 值的单元格。isna() 函数将返回一个布尔型的 DataFrame,其中每个单元格的值为 True 或 False,代表该单元格是否为 None 或 NaN。

下面是一个示例代码:

mask = df.isna()
print(mask)

输出如下:

       A      B      C
0   True   True  False
1  False  False   True
2   True  False  False
3  False  False  False

我们可以看到,mask 中每个单元格的值为 True,代表该单元格是 None 或 NaN。可以说,mask DataFrame 是一个 DataFrame 的“镜像”,其中包含了原始 DataFrame 中每个单元格是否是 None 或 NaN 的信息。

如果我们只想选择具有 None 值的单元格,可以使用以下代码:

none_cells = df[mask]
print(none_cells)

输出如下:

          A         B         C
0       NaN       NaN  0.469717
1 -0.145424  1.061810       NaN
2       NaN -2.180442       NaN

可以看到,none_cells 只包含了原始 DataFrame 中具有 None 值的单元格。

选取不包含 None 值的单元格

与选取包含 None 值的单元格相反,我们可以使用 Pandas 的 notna() 函数选取 DataFrame 中不包含 None 值的单元格。notna() 函数将返回一个布尔型的 DataFrame,其中每个单元格的值为 True 或 False,代表该单元格是否不是 None 或 NaN。

以下是一个示例代码:

mask = df.notna()
print(mask)

输出如下:

       A      B      C
0  False  False   True
1   True   True  False
2  False   True   True
3   True   True   True

我们可以看到,mask 中每个单元格的值为 True,代表该单元格不是 None 或 NaN。

如果我们只想选择具有值的单元格,可以使用以下代码:

non_none_cells = df[mask]
print(non_none_cells)

输出如下:

          A         B         C0       NaN -0.658578  0.469717
1 -0.145424  1.061810       NaN
2       NaN -2.180442  0.680336
3  0.443808 -1.912415  0.934723

可以看到,non_none_cells 只包含了原始 DataFrame 中具有值的单元格(即不是 None 或 NaN 的单元格)。

总结

本文介绍了如何使用 Pandas 选取 DataFrame 或 Series 中具有 None 值的单元格。我们使用了 isna() 和 notna() 函数来创建一个布尔型 DataFrame,然后根据这个 DataFrame 来选取具有 None 值的单元格或不包含 None 值的单元格。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程