python - 在numpy或pandas下,同样的type,为啥 0.0/0.0 有时能=NaN 有时能=inf?
天蓬老师
天蓬老师 2017-04-17 14:30:44
[Python讨论组]

这是 知乎上看到的题目,挺有意思的,可还没人回答,搬过来大家看看。


原标题:在numpy或pandas下,同样的type(float16或int16),为啥 0.0/0.0 有时能 =NaN 有时能 =inf?

这个和前面一个问题很像,但是这次重点我想知道,各种情况下输出不同的原因。

请听题:

我有个python pandas的表

time              q   v         k
2015-4-1 8:00     0   0   
2015-4-1 8:00     16  42 
2015-4-1 8:00     14  59 
... ...... ...... ...... ...... ...

Now I want let k=q/v if v!=0 else k=0. This is how I did:

(因为里面有日文在别的col里,所以用的encoding=shift-jis,导致 **type 都是 object**)
>>>df['k'] = df['q'].astype(float16) /df['v'].astype(float16)
q  v    k
0  0  NaN
>>>df['k'][df['v']==0] = 0.0

(更好的方法您能分享吗?)
只有我让 k,q 都是 float16 时, 上面 0/0 is NaN. 可是:

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

也就是 0/float16(0)=nan 但是换到pandas里就不行

再来:

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

也就是 int16(0)/int16(0)=nan 但是换到pandas里就是inf。。。

还没完:

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

也就是把整个dataframe给变float16以后竟然也能出inf。。。

这都是为啥啊?

天蓬老师
天蓬老师

欢迎选择我的课程,让我们一起见证您的进步~~

全部回复(0)
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号