【问题标题】:Boolean indexing with two conditions to include NaN具有两个条件以包含 NaN 的布尔索引
【发布时间】:2021-08-24 15:42:17
【问题描述】:

我想在 numpy 数组和 pandas 系列上使用布尔索引来选择某一列中所有值为

import numpy as np

a = [0.5, 0, 1, 17, np.nan]
b = np.array(a)
c = b[b < 3 or b == np.nan]

【问题讨论】:

    标签: python numpy indexing boolean


    【解决方案1】:

    您需要使用方括号,将or 替换为| 运算符并使用np.isnan 而不是==

    c = b[(b < 3) | np.isnan(b)]
    

    RuntimeWarning 可能是因为它试图将NaN 值与数字进行比较。您可以尝试在该会话中忽略它:

    with np.errstate(invalid='ignore'):
        c = b[(b < 3) | np.isnan(b)]
    

    【讨论】:

    • 对我不起作用“运行时警告:在 less c = b[(b
    • 在简单的 python/IPython 终端(即没有 Pycharm)中是否相同?你可能在一个环境中?
    • 我更新了关于忽略警告的答案。
    • 我只是直接从终端尝试了相同的脚本,我收到了相同的错误消息
    • 谢谢,我将您的更新包含在“与 np.errstate(invalid='ignore'):”中,现在它可以工作了,感谢您的帮助!
    【解决方案2】:

    其中一个应该可以解决问题:

    c = b[np.logical_or(b < 3, b == np.nan)]
    # or
    c = b[np.where((b < 3) | (b == np.nan))]
    # or
    c = b[(b < 3) | (b == np.nan)]
    

    我不知道一个比另一个有什么好处,但如果我不得不猜测我会说np.where 可能会稍微快一点?只是猜测。

    【讨论】:

    • 这些都不适合我“RuntimeWarning:在 less c = b[np.logical_or(b
    • 您正在运行您发布的示例吗?还是有更多数据的东西?
    • 只有我贴的例子
    • 其他人有问题吗?我可以毫无问题地运行它们 - 也许这是不同版本的 NumPy 的问题
    • 我将 np v1.16.0 与 python 3.6 和 pycharm 一起使用。编辑:刚刚更新到 1.20,问题依然存在。
    猜你喜欢
    • 2016-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多