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使用Scrapy爬取妹子图
May 28 Python
Python加密方法小结【md5,base64,sha1】
Jul 13 Python
TensorFlow实现Softmax回归模型
Mar 09 Python
python3处理含有中文的url方法
May 10 Python
解决python升级引起的pip执行错误的问题
Jun 12 Python
python使用turtle库绘制树
Jun 25 Python
Python实现按逗号分隔列表的方法
Oct 23 Python
对json字符串与python字符串的不同之处详解
Dec 19 Python
Django Channel实时推送与聊天的示例代码
Apr 30 Python
Python基于traceback模块获取异常信息
Jul 23 Python
pycharm全局搜索的具体步骤
Jul 28 Python
Pycharm配置autopep8实现流程解析
Nov 28 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自动加载的两种实现方法
2010/06/21 PHP
js网页侧边随页面滚动广告效果实现
2011/04/14 Javascript
深入理解JavaScript作用域和作用域链
2011/10/21 Javascript
jquery必须知道的一些常用特效方法及使用示例(整理)
2013/06/24 Javascript
如何判断鼠标是否在DIV的区域内
2013/11/13 Javascript
js jquery分别实现动态的文件上传操作按钮的添加和删除
2014/01/13 Javascript
JavaScript中原型和原型链详解
2015/02/11 Javascript
JQuery动态添加和删除表格行的方法
2015/03/09 Javascript
简介JavaScript中fixed()方法的使用
2015/06/08 Javascript
jquery 实现输入邮箱时自动补全下拉提示功能
2015/10/04 Javascript
JS面试题---关于算法台阶的问题
2016/07/26 Javascript
Javascript将字符串日期格式化为yyyy-mm-dd的方法
2016/10/27 Javascript
pc加载更多功能和移动端下拉刷新加载数据
2016/11/07 Javascript
详解js中Json的语法与格式
2016/11/22 Javascript
Angular.Js的自动化测试详解
2016/12/09 Javascript
JavaScript中在光标处插入添加文本标签节点的详细方法
2017/03/22 Javascript
jQuery extend()详解及简单实例
2017/05/06 jQuery
vue使用ElementUI时导航栏默认展开功能的实现
2018/07/04 Javascript
vue生成token并保存到本地存储中
2018/07/17 Javascript
超好用的jQuery分页插件jpaginate用法示例【附源码下载】
2018/12/06 jQuery
使用vue实现各类弹出框组件
2019/07/03 Javascript
vue中 数字相加为字串转化为数值的例子
2019/11/07 Javascript
angular中的post请求处理示例详解
2020/06/30 Javascript
nestjs中异常过滤器Exceptionfilter的具体使用
2021/02/07 Javascript
python实现将pvr格式转换成pvr.ccz的方法
2015/04/28 Python
ubuntu安装sublime3并配置python3环境的方法
2018/03/15 Python
使用pycharm设置控制台不换行的操作方法
2019/01/19 Python
Python+Selenium使用Page Object实现页面自动化测试
2019/07/14 Python
Python itertools.product方法代码实例
2020/03/27 Python
使用CSS实现阅读进度条
2017/02/27 HTML / CSS
高中毕业的自我鉴定
2013/12/09 职场文书
党员个人整改措施
2014/10/24 职场文书
社区安置帮教工作总结2015
2015/05/20 职场文书
离婚答辩状范文
2015/05/22 职场文书
SQLServer2008提示评估期已过解决方案
2021/04/12 SQL Server
PyTorch 如何检查模型梯度是否可导
2021/06/05 Python