我正在使用下面的代码绕过除以零错误仍然得到一个,无法弄清楚这里到底出了什么问题。
df.loc[:,'B to A Ratio'] =np.where(df.loc[:,'A']!=0,df.loc[:,'B']/df.loc[:,'A'],np.nan)
仅供引用,我正在对从数据透视表创建的数据框执行此操作。此处的“A”和“B”列仅用于说明。
最佳答案
正如@Divakar 所评论的,当您使用 np.where
时,仍然对两个系列中的所有值进行全面评估;为避免被零除,您可以将零转换为 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 中除以零得到
inf
而不是引发错误df.B / df.A
#0 0.000000
#1 1.000000
#2 inf
#3 0.000000
#4 0.250000
#dtype: float64
关于python-3.x - ZeroDivisionError : float division by zero (python 3. 6),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46347411/