时间:2021-05-22
今天在对一堆新数据进行数据清洗的时候,遇到了一个这样的问题:
ValueError: cannot convert float NaN to integer一开始是这样的,我用的jupyter是python35的,使用DataFrame读入了数据,其中有一列是year,默认读入时是将year这一列转换为了float,所以就有了这样的现象:
年份都是float类型了,看得我强迫症都犯了。于是通过这样的代码来进行强转,于是就报了上面的错误了。
df.year = [int(y) for y in df.year]简单描述一下问题,其实就是NaN在python35中无法被强转。
首先说一下,NaN类型在python25中在强转int的时候默认是转换为0的,而在python25之后的版本再进行转换的时候就会报以上的错误。
我们先打印看一下np.nan的类型:
print(type(np.nan))<type 'float'>np.nan是float类型,但是在进行int转换的时候就会报错。
解决方法:
使用is或者==进行判断是不是NaN,不是NaN进行强转int,是则用0代替。
先说一下==和is使用时的区别:
is和==都是对对象进行比较判断作用的,但对对象比较判断的内容并不相同。
如果有a跟b两个变量,只有数值型和字符串型的情况下,a is b才为True,当a和b是tuple,list,dict、set或者是实例化对象时,a is b为False。
==是python标准操作符中的比较操作符,用来比较判断两个对象的value(值)是否相等。
通过下面的代码可以看出,np.nan==np.nan结果是False,但是np.nan is np.nan却是True。
a = np.nan print(a == np.nan)print(a == a)print(a is np.nan)print(a is a) FalseFalseTrueTrue因此,通过每个元素与自身比较就可以解决了,代码如下:
year = []for y in df.year: if y == y: year.append(int(y)) else: year.append(0)以上这篇python2与python3中关于对NaN类型数据的判断和转换方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
python2和python3对于字符串的处理有很大的区别熟悉了python2的写法用python3时真的会遇到很多问题啊……区别python2中有一种类型叫做
最新的CentOS8已经内置了Python2和Python3,出入Python2和Python3两个命令可以分别进入Python2和Python3。CentOS
最近写了一些python3程序,四处能看到bytes类型,而它并不存在于python2中,这也是python3和python2显著区别之一。以前在写python
想学习Python的人都会有一个困惑,那就是Python目前有两个版本Python2和Python3,Python2与Python3有何区别,两个版本该学习哪个
由于python2和python3在部分语法上不兼容,导致有人打趣道:"Python2和Python3是两门语言"对于初学者而言,如果同时安装了python2和