gpt4 book ai didi

Python:什么时候 0.0/0.0 =NaN 或 inf ,什么时候会给出异常?

转载 作者:行者123 更新时间:2023-12-01 04:49:37 25 4
gpt4 key购买 nike

我在 python.pandas 中得到了一个数据框:

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

现在我想让 k=q/v if v!=0 else 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

为什么?

最佳答案

您可以将其用于一个衬垫:

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?

关于Python:什么时候 0.0/0.0 =NaN 或 inf ,什么时候会给出异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28733090/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com