Python 3.x ZeroDivisionError:浮点除以零(python 3.6)
我正在使用下面的代码绕过被零除的错误,仍然得到一,无法找出这里到底出了什么问题Python 3.x ZeroDivisionError:浮点除以零(python 3.6),python-3.x,pandas,numpy,Python 3.x,Pandas,Numpy,我正在使用下面的代码绕过被零除的错误,仍然得到一,无法找出这里到底出了什么问题 df.loc[:,'B to A Ratio'] =np.where(df.loc[:,'A']!=0,df.loc[:,'B']/df.loc[:,'A'],np.nan) 仅供参考,我正在从数据透视表创建的数据帧上执行此操作。此处的“A”列和“B”列仅用于说明。正如@Divakar所评论的,当您使用np时,仍然会对两个系列中的所有值进行完整的除法计算;为了避免被零除,您可以在除法之前将零转换为nan,因为被na
df.loc[:,'B to A Ratio'] =np.where(df.loc[:,'A']!=0,df.loc[:,'B']/df.loc[:,'A'],np.nan)
仅供参考,我正在从数据透视表创建的数据帧上执行此操作。此处的“A”列和“B”列仅用于说明。正如@Divakar所评论的,当您使用
np时,仍然会对两个系列中的所有值进行完整的除法计算;为了避免被零除,您可以在除法之前将零转换为nan
,因为被nan
除的任何值都给出nan
:
df = pd.DataFrame({
"A": [1,2,0,3,4],
"B": [0,2,1,0,1]
})
df.B.div(df.A.where(df.A != 0, np.nan))
#0 0.00
#1 1.00
#2 NaN
#3 0.00
#4 0.25
#dtype: float64
也不确定您的pandas版本是什么,在pandas 0.19~0.20中除以0得到inf
,而不是产生错误
df.B / df.A
#0 0.000000
#1 1.000000
#2 inf
#3 0.000000
#4 0.250000
#dtype: float64
因为您仍然在以下位置执行零除法:df.loc[:,'B']/df.loc[:,'A']
<代码>np。此后在哪里
进行选择。谢谢,这很有效!,或者,我使用了下面的代码:data['B to A Ratio']=data.apply(lambda x:x['B']/x['A']如果x['A']!=0 else np.nan,axis=1)我使用的是pandas版本0.20.1,它没有给出infI没有0.20.1
。但是0.19.2
和0.20.3
确实给出了inf
。也许您正在分割numpy数组而不是熊猫系列,在这种情况下,我会收到警告消息。