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入门篇之列表和元组
Oct 17 Python
python使用in操作符时元组和数组的区别分析
May 19 Python
使用python加密自己的密码
Aug 04 Python
详解python中executemany和序列的使用方法
Aug 12 Python
python中如何正确使用正则表达式的详细模式(Verbose mode expression)
Nov 08 Python
python获取本机所有IP地址的方法
Dec 26 Python
Python爬取视频(其实是一篇福利)过程解析
Aug 01 Python
基于python cut和qcut的用法及区别详解
Nov 22 Python
python文件和文件夹复制函数
Feb 07 Python
pycharm开发一个简单界面和通用mvc模板(操作方法图解)
May 27 Python
django rest framework 过滤时间操作
Jul 12 Python
Python PIL按比例裁剪图片
May 11 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类中private属性继承问题分析
2012/11/01 PHP
跟我学Laravel之路由
2014/10/15 PHP
详解Grunt插件之LiveReload实现页面自动刷新(两种方案)
2015/07/31 PHP
php多线程实现方法及用法实例详解
2015/10/26 PHP
基于thinkPHP实现的微信自定义分享功能示例
2016/09/23 PHP
laravel 解决Eloquent ORM的save方法无法插入数据的问题
2019/10/21 PHP
Aster vs KG BO3 第三场2.18
2021/03/10 DOTA
永不消失的title提示代码
2007/02/15 Javascript
让任务管理器中的CPU跳舞的js代码
2008/11/01 Javascript
js+JQuery返回顶部功能如何实现
2012/12/03 Javascript
js实现网页自动刷新可制作节日倒计时效果
2014/05/27 Javascript
浅谈NodeJS中require路径问题
2015/05/07 NodeJs
JavaScript模拟数组合并concat
2016/03/06 Javascript
JS使用正则实现去掉字符串左右空格的方法
2016/12/27 Javascript
基于input框覆盖掉数字英文的实例讲解
2017/07/21 Javascript
实例讲解JS中pop使用方法
2019/01/27 Javascript
说说如何利用 Node.js 代理解决跨域问题
2019/04/22 Javascript
python发送邮件功能实现代码
2016/07/15 Python
删除DataFrame中值全为NaN或者包含有NaN的列或行方法
2018/11/06 Python
python ChainMap 合并字典的实现步骤
2019/06/11 Python
Python的对象传递与Copy函数使用详解
2019/12/26 Python
Python matplotlib实时画图案例
2020/04/23 Python
Python如何实现爬取B站视频
2020/05/20 Python
Python中socket网络通信是干嘛的
2020/05/27 Python
可视化pytorch 模型中不同BN层的running mean曲线实例
2020/06/24 Python
浅谈HTML5 服务器推送事件(Server-sent Events)
2017/08/01 HTML / CSS
HTML5 SEO优化的一些建议
2020/08/27 HTML / CSS
Hertz荷兰:荷兰和全球租车
2018/01/07 全球购物
全球独特生活方式产品和礼品购物网站:AHAlife
2018/09/18 全球购物
加拿大领先的时尚和体育零售商:Sporting Life
2019/12/15 全球购物
BSTN意大利:德国街头和运动文化高品质商店
2020/12/22 全球购物
入党积极分子思想汇报范文
2014/01/05 职场文书
生日主持词
2014/03/20 职场文书
尊师重教演讲稿
2014/09/04 职场文书
2014年档案管理员工作总结
2014/12/01 职场文书
消夏晚会主持词
2015/06/30 职场文书