Python:0.0 / 0.0 = NaN或inf时,它何时会出现异常?

时间:2015-02-26 01:47:00

标签: python exception pandas division

我在python.pandas中获得了一个数据帧:

q   v         k
0   0   
16  42 
14  59 
... ...

现在我想让k = q / v,如果v!= 0,则k = 0。 这就是我的方式:

>>>df['k'] = df['q'].astype(float16) /df['v'].astype(float16)
q  v    k
0  0  NaN
>>>df['k'][df['v']==0] = 0.0

设置float16时,它给出NaN。然而

>>>0/np.float64(0) 
nan
>>>df['k'] = df['q'] /df['v'].astype(float16)
ZeroDivisionError

此外,

>>> df['k'] = df['q'].astype(int16)/df['v'].astype(int16)
q  v    k
0  0  inf
>>> np.int64(0)/np.int64(0)
nan

为什么?

1 个答案:

答案 0 :(得分:2)

你可以将它用于一个班轮:

df =pd.DataFrame({'q':[0,16,14],'v':[0,42,59]})
df.astype('float64')
df['k']=(df.q/df.v).replace({ np.inf : 0 })

Numpy正在处理零除错误。 (可以使用sterr http://docs.scipy.org/doc/numpy/reference/generated/numpy.seterr.html#numpy.seterr

更改行为

这是一篇帖子,展示了在纯python中处理它的函数: How to get Python division by -0.0 and 0.0 to result in -Inf and Inf, respectively?