怎么可能会返回ZeroDivisionError?

时间:2017-09-12 21:31:50

标签: python pandas

我正在运行以下代码:

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.

谢谢你的回答!效果很好。

1 个答案:

答案 0 :(得分:1)

嗯,你对np.where(condition, [x, y])函数有一点误解。进行调用时,将首先评估输入参数xy。在您的情况下,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])

感谢。