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 相关文章推荐
Flask SQLAlchemy一对一,一对多的使用方法实践
Feb 10 Python
Python进行数据提取的方法总结
Aug 22 Python
简单实现python数独游戏
Mar 30 Python
如何利用Boost.Python实现Python C/C++混合编程详解
Nov 08 Python
对pandas处理json数据的方法详解
Feb 08 Python
Apache部署Django项目图文详解
Jul 30 Python
Python通过正则库爬取淘宝商品信息代码实例
Mar 02 Python
Python手动或自动协程操作方法解析
Jun 22 Python
利用Python过滤相似文本的简单方法示例
Feb 03 Python
python 机器学习的标准化、归一化、正则化、离散化和白化
Apr 16 Python
matlab xlabel位置的设置方式
May 21 Python
Python实现信息轰炸工具(再也不怕说不过别人了)
Jun 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 sprintf()函数用例解析
2011/05/18 PHP
laravel5创建service provider和facade的方法详解
2016/07/26 PHP
阿里云的WindowsServer2016上部署php+apache
2018/07/17 PHP
让textarea控件的滚动条怎是位与最下方
2007/04/20 Javascript
收集的一些Array及String原型对象的扩展实现代码
2010/12/05 Javascript
javascript对JSON数据排序的3个例子
2014/04/12 Javascript
js实现获取焦点后光标在字符串后
2014/09/17 Javascript
JS实现判断碰撞的方法
2015/02/11 Javascript
基于jquery实现人物头像跟随鼠标转动
2015/08/23 Javascript
jQuery实现选项卡切换效果简单演示
2015/12/09 Javascript
深入学习JavaScript的AngularJS框架中指令的使用方法
2016/03/05 Javascript
实例讲解jQuery中对事件的命名空间的运用
2016/05/24 Javascript
Javascript6中字符串的四个新用法分享
2016/09/11 Javascript
Bootstrap和Java分页实例第一篇
2016/12/23 Javascript
通过AngularJS实现图片上传及缩略图展示示例
2017/01/03 Javascript
JavaScript实现计数器基础方法
2017/10/10 Javascript
React通过父组件传递类名给子组件的实现方法
2017/11/13 Javascript
vue项目中v-model父子组件通信的实现详解
2017/12/10 Javascript
vue.js实现只弹一次弹框
2018/01/29 Javascript
vue使用代理解决请求跨域问题详解
2019/07/24 Javascript
javascript删除数组元素的七个方法示例
2019/09/09 Javascript
小程序实现录音上传功能
2019/11/22 Javascript
vue 子组件和父组件传值的示例
2020/09/11 Javascript
Python通过OpenCV的findContours获取轮廓并切割实例
2018/01/05 Python
Python中property属性实例解析
2018/02/10 Python
Python closure闭包解释及其注意点详解
2019/08/28 Python
pytorch判断是否cuda 判断变量类型方式
2020/06/23 Python
python实现图像外边界跟踪操作
2020/07/13 Python
CSS3新属性transition-property transform box-shadow实例学习
2013/06/06 HTML / CSS
房屋买卖协议书范本
2014/04/10 职场文书
经典禁毒标语
2014/06/16 职场文书
幼儿园六一儿童节活动方案
2014/08/26 职场文书
庆六一活动总结
2014/08/29 职场文书
硕士毕业论文导师评语
2014/12/31 职场文书
2015年教研组工作总结
2015/05/04 职场文书
JavaScript实现一键复制内容剪贴板
2022/07/23 Javascript