上述代码报错Cannot mask with non-boolean array containing NA / NaN values,如何修改
时间: 2024-12-14 12:17:51 浏览: 16
这个错误提示 "Cannot mask with non-boolean array containing NA / NaN values" 出现是因为你在使用 `.str.contains()` 或其他基于布尔值的操作时,传入了一个包含缺失值 (NA 或 NaN) 的数组,而这些操作期望的是布尔型的True和False作为条件。
在Pandas中,如果你不确定列中是否存在缺失值,需要先对列进行处理,将缺失值转换成布尔值。你可以使用 `pd.isnull()` 或 `~pd.isna()` 来完成这个步骤,再与 `.str.contains()` 结合。以下是修复的方法:
```python
import pandas as pd
# 检查 'record' 列是否有缺失值
has_missing = pd.isnull(consult['record']) | consult['record'].str.contains('小牛医助').isnull()
# 将缺失值替换为 False,非缺失值替换为 True
filtered_mask = has_missing.fillna(False) & consult['record'].str.contains('小牛医助', na=False).astype(bool)
# 使用布尔mask过滤数据
filtered_data = consult[filtered_mask]
# 打印结果
print(filtered_data)
```
这里的`fillna(False)`将缺失值填充为False,`astype(bool)`将结果转换为布尔值,然后可以正常用于数据筛选。注意`na=False`参数传递给`.str.contains`是为了指定忽略缺失值。
阅读全文