【发布时间】:2017-09-12 21:31:50
【问题描述】:
我正在运行以下代码:
df['diff']=np.where(df['fc']!=0,(df['ar']-df['fc'])/df['fc'],0)
它返回一个 ZeroDivisionError。当我指定仅在分母不等于 0 时才运行该公式时,我不确定这是如何发生的。如果我运行下面的代码,它可以工作,但我不想删掉这是真的行:
df2=df[df['fc']!=0]
df2['diff']=(df['ar']-df['fc'])/df['fc']
编辑为“指定明确的目标”:此处所需的输出将在分母为 0 时返回 0,并在分母 > 0 时返回差 %。
感谢您的回答!完美运行。
【问题讨论】:
-
(df['ar']-df['fc'])/df['fc']对所有元素进行除法,无论是否为零。 -
“当我指定仅在分母不等于 0 时运行该公式时,我不确定这是怎么发生的” 不,这不是你在做什么。
np.where不会神奇地改变 Python 的工作方式,因为所有表达式在作为参数传递之前都会被评估为其值。np.where返回值您传递给它的布尔数组是真实的。你不传递一个表达式,你传递一个值。 -
@sokeefe1014,我无法使用您的
np.where(...)代码复制它。能否提供一个小样本可重现的数据集? -
"它执行此操作,但仅在限定符为真时保留该值?" - 确切地。
numpy.where不是条件执行;它是条件选择,根据条件数组从已经存在的数组中选择结果。