Python 这怎么可能返回零错误?

Python 这怎么可能返回零错误?,python,pandas,Python,Pandas,我正在运行以下代码: df['diff']=np.where(df['fc']!=0,(df['ar']-df['fc'])/df['fc'],0) 它正在返回一个零错误。当我指定仅在分母不等于0时运行该公式时,我不确定这是如何发生的。如果我运行下面的命令,它会起作用,但我不想在正确的地方删除行: df2=df[df['fc']!=0] df2['diff']=(df['ar']-df['fc'])/df['fc'] 编辑为“指定明确目标”:此处所需的输出将在分母为0时返回0,在分母>0时返

我正在运行以下代码:

df['diff']=np.where(df['fc']!=0,(df['ar']-df['fc'])/df['fc'],0)

它正在返回一个零错误。当我指定仅在分母不等于0时运行该公式时,我不确定这是如何发生的。如果我运行下面的命令,它会起作用,但我不想在正确的地方删除行:

df2=df[df['fc']!=0]
df2['diff']=(df['ar']-df['fc'])/df['fc']
编辑为“指定明确目标”:此处所需的输出将在分母为0时返回0,在分母>0时返回差值%


谢谢你的回答!很好地工作。

好吧,您对
np.where(条件,[x,y])
函数有一点误解。进行调用时,将首先计算输入参数
x
y
。在您的例子中,
x=(df['ar']-df['fc'])/df['fc']
,这样,如果df['fc']包含任何零,您将重新输入
ZeroDivisionError
。我喜欢@user2357112,
np的注释。其中
对每个元素执行条件选择,如果为True,则从
x
执行,如果为False,则从
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])

谢谢。

(df['ar']-df['fc'])/df['fc']
对所有元素执行除法,无论是否为零。“当我指定仅在分母不等于0时运行该公式时,我不确定这是如何发生的”不,这不是您正在做的
np。其中
不会神奇地改变Python的工作方式,因为所有表达式在作为参数传递之前都会求值
np。其中
返回传递的布尔数组为truthy的值。你不能给它传递一个表达式,而是给它传递一个值。@sokeefe1014,我不能用你的
np复制它。其中(…)
code。你能提供一个小样本的可复制数据集吗?这里有两个有用的问题:,但如果我没有弄错的话,在最近的版本中,它不会引发错误,而是发出警告,并返回
nan
inf
“它执行此操作,但仅在限定符为真时才保留值?”-完全正确<代码>numpy。其中不是条件执行;它是条件选择,根据条件数组从已经存在的数组中选择结果。