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 值的单元格。
极客笔记