我在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
为什么?
答案 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?