使用 .any() 后使用 np.where 返回错误 [重复]

Posted

技术标签:

【中文标题】使用 .any() 后使用 np.where 返回错误 [重复]【英文标题】:Using np.where returns error after using .any() [duplicate] 【发布时间】:2020-02-06 05:03:55 【问题描述】:

我正在处理需要根据多个条件创建大量标志的数据框。我正在使用np.where,但现在我遇到了这个错误

ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

为了可复制性和简单性,我仅将产生错误的部分代码与使用的列一起分享。 正在使用的数据框:

     Data  Uniques  day_a1  day_a2  day_a3
0       1        1       3     NaN     NaN
1       2        2      14    15.0     NaN
2       2        1      10    10.0     NaN
3       3        1      10    10.0    10.0
802     2        2      12     NaN    29.0
806     1        1      29     NaN     NaN

产生错误的代码:

df['flag_3.3.3.1.1'] = np.where(
    (
        (df['Data'] == 3) & 
        (df['day_a1'] != 10) & 
        (df['Uniques'] == 3) & #I ran this separately and it was fine
        (df['day_a1'] > 27 or df['day_a1'] < 4).any()),'flag',np.nan)

or 之后传递.any() 之后我似乎仍然有问题。

【问题讨论】:

idownvotedbecau.se/nodebugging 把你的长长的陈述分成几部分;如有必要,多个语句。看看每个部分产生了什么。 这是一个真正复杂的操作集,你有inside你的函数调用。您是否考虑过将其拆分为多个语句作为准备?将帮助我们读者和您自己更好地了解实际情况 解决这个问题的魔术师是谁?非常感谢!我不确定如何在不破坏代码的情况下拆分它们(我真的试过了)。 a= (df['Data'] == 3); b=(df['day_a1'] != 10);等等; x=a &amp; b &amp; c &lt;etc&gt;; np.where(x, '3.3.3.1.1', nan). @CeliusStingher 不客气 :) 如果手动换行代码太棘手,不妨考虑在您的代码上运行 black。虽然编写代码以使行结束时不超过 80-100 个字符通常也是一个好的开始 【参考方案1】:

尝试替换

(df['day_a1'] > 27 or df['day_a1'] < 4)

通过

((df['day_a1'] > 27) | (df['day_a1'] < 4))

注意| 的使用和优先级的附加括号。

【讨论】:

是的,这使它工作!我不知道使用 |非常感谢。 @CeliusStingher 查看以下问题及其答案:***.com/questions/36921951/…

以上是关于使用 .any() 后使用 np.where 返回错误 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何以与 np.where 相同的方式使用 Tensorflow.where?

熊猫相当于 np.where

如何反转 numpy.where (np.where) 函数

使用 np.where 基于多列的 pandas 多个条件

在 np.where 条件下使用 pandas 可为空的整数 dtype

为啥 np.where & np.min 似乎不适用于这个数组?