python - 获取 Cannot mask with non-boolean array containing NA/NaN values...但是没有任何缺失值

标签 python pandas dataframe

我有这个工作,现在我改变了“一些东西”,但它不再工作了。我在 Excel 中有一张表格,我正在读入 df。这按预期工作。我读入它,然后过滤它,这样我就只有符合特定条件的数据行。这是代码:

    df = excel_range_upper_left.options(pd.DataFrame, expand='table', header=1,
            index=False).value

    print(f'Check for missings')
    for c in df.columns:
        count = df[c].isnull().sum()
        print(f'Col {c} has {count} missing values')
    print(f'Done checking for missings')

    df = df[df["Phase"].str.contains('2')]  #, na=False)]

for 循环遍历 df 列以查找缺失值。它们都以 0 缺失值返回。

然后我执行最后一条语句,这应该(我认为)简单地将 df 过滤为一个新的 df(同名),该 df 必须在“Phase”列中具有字符串值“2”。并且它因 Cannot mask... 错误而出错。

我的猜测是表中某处仍然存在缺失值,但我已经用尽我的能力找到它(我也尝试了以下 - 但它的结果与原始 df 相同,但仍然出错:

    print(f'{exer_df.dropna(axis=1)}')

如果我将过滤器行更改为以下内容,使其包含 na=False 选项,一切正常。但是我不知道为什么...

exer_df = exer_df[exer_df["Phase"].str.contains('2', na=False)]

有人有任何见解和帮助吗?

为了完整起见,这里是 for 循环的结果,然后是错误:

Check for missings
Col Type as 0 missing values
Col Sub-Type as 0 missing values
Col Phase as 0 missing values
Col Body Parts as 0 missing values
Col Sets as 0 missing values
Col Reps as 0 missing values
Col Tempo as 0 missing values
Col Intensity as 0 missing values
Col Rest Period as 0 missing values
Col Exercise as 0 missing values
Col Prim Mover as 0 missing values
Done checking for miossings
Traceback (most recent call last):
  File "c:/Users/kirby/OneDrive/Beating Old Age Book/Blog Page Text/nutrition/calculations/plan_creator.py", line 271, in <module>
    mcp()
  File "c:/Users/kirby/OneDrive/Beating Old Age Book/Blog Page Text/nutrition/calculations/plan_creator.py", line 188, in mcp
    exer_df = exer_df[exer_df["Phase"].str.contains('2')]  #, na=False)]
  File "C:\Users\kirby\AppData\Local\Programs\Python\Python38-32\lib\site-packages\pandas\core\frame.py", line 3014, in __getitem__
    if com.is_bool_indexer(key):
  File "C:\Users\kirby\AppData\Local\Programs\Python\Python38-32\lib\site-packages\pandas\core\common.py", line 114, in is_bool_indexer
    raise ValueError(na_msg)
ValueError: Cannot mask with non-boolean array containing NA / NaN values

最佳答案

查普曼,

正如您已经说过的,使用参数 na=False 一切都应该正常工作。

如果您尝试在导入的 Excel DataFrame 中使用 Series.str.contains 和空白值,则会引发 ValueError:“无法使用包含 NA/NaN 值的非 bool 数组进行屏蔽"

指定naFalse(na=False),将NaN值替换为False值,避免了该错误;另一种解决方案是在调用函数之前 Series.fillna(False)

不知何故,使用其他填充值在这种特定情况下不起作用,它需要是 Bool。

关于python - 获取 Cannot mask with non-boolean array containing NA/NaN values...但是没有任何缺失值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66536221/

相关文章:

python - 一个热编码序列,其值在测试中不存在

r - 检查一个数据帧是否是另一个数据帧的重新排序

python - 为什么将枚举函数结果传递给 dict 构造函数会产生类型警告?

python - exec 函数在 python 3.6 中无法正常工作

python - Pyarrow:将流读入 p​​andas 数据帧高内存消耗

Python:当行元素由行名称中的字符串组成时删除行

python - 迭代 df 行并附加到不带名称和 dtype 的列表

python - 使用 Python 获取鼠标增量! (在 Linux 中)

python - 如何在 python 2.7 上安装 mypy-lang?

python - 删除 Pandas 中的标点符号