我正在运行以下代码:
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.
谢谢你的回答!效果很好。
答案 0 :(得分:1)
嗯,你对np.where(condition, [x, y])
函数有一点误解。进行调用时,将首先评估输入参数x
和y
。在您的情况下,x=(df['ar']-df['fc'])/df['fc']
,如果df ['fc']包含任何零,您将会调用ZeroDivisionError
。我喜欢来自@ user2357112的评论,np.where
执行条件选择,x
如果为真,则来自y
如果每个元素都为假。
如果您希望将所有元素保留为df['fc']
的零,则可以先将这些元素设置为np.nan
。在计算之后,您可以处理这些NAN
值,例如,将它们设置为零。
这是伪代码:
df.loc[df.fc == 0, 'fc'] = np.nan
df['diff'] = ((df.ar-df.fc)/df.fc).fillna(0)
以下是划分np.nan
:
In [1]: a = np.array([1.0, np.nan])
In [2]: 2/a
Out[2]: array([ 2., nan])
感谢。