我使用下面的代码来绕过除零错误仍然得到一个错误,无法弄清楚这里究竟出了什么问题。
df.loc[:,'B to A Ratio'] =np.where(df.loc[:,'A']!=0,df.loc[:,'B']/df.loc[:,'A'],np.nan)
仅供参考,我在从数据透视表创建的数据框上执行此操作。列'A'和'这里的'B'仅用于插图。
答案 0 :(得分:2)
正如@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 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