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中使用动态变量名的方法
May 06 Python
python使用smtplib模块通过gmail实现邮件发送的方法
May 08 Python
Python的Scrapy爬虫框架简单学习笔记
Jan 20 Python
详解设计模式中的工厂方法模式在Python程序中的运用
Mar 02 Python
python爬取m3u8连接的视频
Feb 28 Python
Python os.access()用法实例
Feb 18 Python
在Python函数中输入任意数量参数的实例
Jul 16 Python
由面试题加深对Django的认识理解
Jul 19 Python
Win下PyInstaller 安装和使用教程
Dec 25 Python
Win系统PyQt5安装和使用教程
Dec 25 Python
浅谈Python中的继承
Jun 19 Python
Django实现内容缓存实例方法
Jun 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
解析htaccess伪静态的规则
2013/06/18 PHP
PHP延迟静态绑定示例分享
2014/06/22 PHP
php之header的不同用法总结(实例讲解)
2017/11/28 PHP
Javascript 网页水印(非图片水印)实现代码
2010/03/01 Javascript
jquery 之 $().hover(func1, funct2)使用方法
2012/06/14 Javascript
javascript变量作用域使用中常见错误总结
2013/03/26 Javascript
Javascript学习笔记之 函数篇(一) : 函数声明和函数表达式
2014/06/24 Javascript
JavaScript声明变量名的语法规则
2015/07/10 Javascript
jquery.form.js框架实现文件上传功能案例解析(springmvc)
2016/05/26 Javascript
angular实现form验证实例代码
2017/01/17 Javascript
微信小程序 中wx.chooseAddress(OBJECT)实例详解
2017/03/31 Javascript
正则表达式基本语法及表单验证操作详解【基于JS】
2017/04/07 Javascript
angular2中router路由跳转navigate的使用与刷新页面问题详解
2017/05/07 Javascript
jQuery实现点击自身以外区域关闭弹出层功能完整示例【改进版】
2018/07/31 jQuery
vue在路由中验证token是否存在的简单实现
2019/11/11 Javascript
Vue的双向数据绑定实现原理解析
2020/02/17 Javascript
django简单的前后端分离的数据传输实例 axios
2020/05/18 Javascript
如何在Vue.JS中使用图标组件
2020/08/04 Javascript
vue-simple-uploader上传成功之后的response获取代码
2020/09/07 Javascript
小程序实现tab标签页
2020/11/16 Javascript
详解Python中的join()函数的用法
2015/04/07 Python
Python使用folium excel绘制point
2019/01/03 Python
python 安装库几种方法之cmd,anaconda,pycharm详解
2020/04/08 Python
解决jupyter运行pyqt代码内核重启的问题
2020/04/16 Python
OpenCV4.1.0+VS2017环境配置的方法步骤
2020/07/09 Python
解决python和pycharm安装gmpy2 出现ERROR的问题
2020/08/28 Python
python与c语言的语法有哪些不一样的
2020/09/13 Python
HTML5中图片之间的缝隙完美解决方法
2017/07/07 HTML / CSS
使用iframe+postMessage实现页面跨域通信的示例代码
2020/01/14 HTML / CSS
详解如何在登录过期后跳出Ifram框架
2020/09/10 HTML / CSS
Alba Moda瑞士网上商店:独家意大利时尚女装销售
2016/11/28 全球购物
运动会开幕式主持词
2014/03/28 职场文书
离职感谢信
2015/01/21 职场文书
销售辞职信范文
2015/03/02 职场文书
保险公司2016开门红口号集锦
2015/12/24 职场文书
2019年幼儿园家长接送责任书
2019/10/29 职场文书