如何修复:valueerror:无法使用包含 na/nan 值的非布尔数组进行掩码


使用 pandas 时可能遇到的错误是:

 ValueError : Cannot mask with non-boolean array containing NA / NaN values

当您尝试在 pandas DataFrame 中查找包含特定字符串的行,但您正在搜索的列具有 NaN 值时,通常会发生此错误。

以下示例展示了如何在实践中纠正此错误。

如何重现错误

假设我们有以下 pandas DataFrame:

 import pandas as pd
import numpy as np

#createDataFrame
df = pd. DataFrame ({' team ': ['A', 'A', 'A', 'B', 'B'],
                   ' position ': ['Guard', 'Guard', np. nan , 'Guard', 'Forward'],
                   ' points ': [22, 28, 14, 13, 19]})

#view DataFrame
print (df)

  team position points
0 A Guard 22
1 A Guard 28
2 A NaN 14
3 B Guard 13
4 B Forward 19

现在假设我们尝试访问 DataFrame 中位置列包含字符串“Guard”的所有行:

 #access all rows where position column contains 'Guard'
df[df[' position ']. str . contains (' Guard ')]

ValueError : Cannot mask with non-boolean array containing NA / NaN values

我们收到错误,因为位置列中有 NaN 值。

如何修复错误

要避免此错误,只需在str.contains()函数中使用na=False参数即可:

 #access all rows where position column contains 'Guard', ignore NaN
df[df[' position ']. str . contains (' Guard ', na= False )]

        team position points
0 A Guard 22
1 A Guard 28
3 B Guard 13

这次我们可以访问位置列中包含“Guard”的所有行,不会出现任何错误。

避免此错误的另一种方法是使用.fillna(False) ,如下所示:

 #access all rows where position column contains 'Guard', ignore NaN
df[df[' position ']. str . contains (' Guard '). fillna ( False )]

        team position points
0 A Guard 22
1 A Guard 28
3 B Guard 13

我们再次可以访问位置列中包含“Guard”的所有行,不会出现任何错误。

其他资源

以下教程解释了如何修复 Python 中的其他常见错误:

如何修复 Pandas 中的 KeyError
如何修复:ValueError:无法将 float NaN 转换为 int
如何修复:ValueError:操作数无法与形状一起广播

添加评论

您的电子邮箱地址不会被公开。 必填项已用*标注