使用 .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 & b & c <etc>
; 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?
如何反转 numpy.where (np.where) 函数