python2与python3中关于对NaN类型数据的判断和转换方法


Posted in Python onOctober 30, 2018

今天在对一堆新数据进行数据清洗的时候,遇到了一个这样的问题:

ValueError: cannot convert float NaN to integer

一开始是这样的,我用的jupyter是python35的,使用DataFrame读入了数据,其中有一列是year,默认读入时是将year这一列转换为了float,所以就有了这样的现象:

python2与python3中关于对NaN类型数据的判断和转换方法

年份都是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)
 
 
False
False
True
True

因此,通过每个元素与自身比较就可以解决了,代码如下:

year = []
for y in df.year:
 if y == y:
  year.append(int(y))
 else:
  year.append(0)

以上这篇python2与python3中关于对NaN类型数据的判断和转换方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python开发WebService系列教程之REST,web.py,eurasia,Django
Jun 30 Python
Python2.x中文乱码问题解决方法
Jun 02 Python
深入理解Python中各种方法的运作原理
Jun 15 Python
Python实现身份证号码解析
Sep 01 Python
在Python的Flask框架中验证注册用户的Email的方法
Sep 02 Python
numpy返回array中元素的index方法
Jun 27 Python
在Python 中同一个类两个函数间变量的调用方法
Jan 31 Python
python+opencv实现摄像头调用的方法
Jun 22 Python
Python math库 ln(x)运算的实现及原理
Jul 17 Python
python使用ctypes调用扩展模块的实例方法
Jan 28 Python
Python 解析库json及jsonpath pickle的实现
Aug 17 Python
深入解析NumPy中的Broadcasting广播机制
May 30 Python
numpy 对矩阵中Nan的处理:采用平均值的方法
Oct 30 #Python
Python Numpy:找到list中的np.nan值方法
Oct 30 #Python
pandas 条件搜索返回列表的方法
Oct 30 #Python
pandas 转换成行列表进行读取与Nan处理的方法
Oct 30 #Python
在Python中给Nan值更改为0的方法
Oct 30 #Python
python pandas消除空值和空格以及 Nan数据替换方法
Oct 30 #Python
使用django-guardian实现django-admin的行级权限控制的方法
Oct 30 #Python
You might like
PHP游戏编程25个脚本代码
2011/02/08 PHP
PHP和Shell实现检查SAMBA与NFS Server是否存在
2015/01/07 PHP
微信公众平台开发之配置与请求
2015/08/26 PHP
Yii2.0 模态弹出框+ajax提交表单
2016/05/22 PHP
PHP如何读取由JavaScript设置的Cookie
2017/03/22 PHP
PHP中soap用法示例【SoapServer服务端与SoapClient客户端编写】
2018/12/25 PHP
JQuery学习笔录 简单的JQuery
2012/04/09 Javascript
javascript禁用Tab键脚本实例
2013/11/22 Javascript
实现checkbox全选、反选、取消JavaScript小脚本异常
2014/04/10 Javascript
jQuery循环滚动新闻列表示例代码
2014/06/17 Javascript
js预加载图片方法汇总
2015/06/15 Javascript
三个js循环的关键字示例(for与while)
2016/02/16 Javascript
让浏览器崩溃的12行JS代码(DoS攻击分析及防御)
2016/10/10 Javascript
Javascript使用uploadify来实现多文件上传
2016/11/16 Javascript
bootstrap 表单验证使用方法
2017/01/11 Javascript
JavaScript运动框架 多值运动(四)
2017/05/18 Javascript
js微信分享接口调用详解
2019/07/23 Javascript
Layui实现数据表格默认全部显示(不要分页)
2019/10/26 Javascript
weui中的picker使用js进行动态绑定数据问题
2019/11/06 Javascript
Node.js API详解之 vm模块用法实例分析
2020/05/27 Javascript
vue 使用localstorage实现面包屑的操作
2020/11/16 Javascript
[01:11:46]DOTA2-DPC中国联赛 正赛 iG vs Magma BO3 第一场 2月23日
2021/03/11 DOTA
在Python下尝试多线程编程
2015/04/28 Python
python自动化生成IOS的图标
2018/11/13 Python
python配置grpc环境
2019/01/01 Python
python实现单链表的方法示例
2019/09/03 Python
Python Tricks 使用 pywinrm 远程控制 Windows 主机的方法
2020/07/21 Python
彻底解决Python包下载慢问题
2020/11/15 Python
css3 position fixed固定居中问题解决方案
2014/08/19 HTML / CSS
大学生找工作求职信
2014/07/09 职场文书
英文慰问信
2015/02/14 职场文书
匿名信格式范文
2015/05/27 职场文书
2016年寒假家长评语
2015/10/10 职场文书
2016元旦文艺汇演主持词(开场白+结束语)
2015/12/03 职场文书
利用Nginx代理如何解决前端跨域问题详析
2021/04/02 Servers
Go标准容器之Ring的使用说明
2021/05/05 Golang