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 抓取动态网页内容方案详解
Dec 25 Python
Python中函数的参数传递与可变长参数介绍
Jun 30 Python
Pandas之drop_duplicates:去除重复项方法
Apr 18 Python
PyTorch学习笔记之回归实战
May 28 Python
对python实现模板生成脚本的方法详解
Jan 30 Python
django 微信网页授权登陆的实现
Jul 30 Python
python 如何将数据写入本地txt文本文件的实现方法
Sep 11 Python
关于numpy中eye和identity的区别详解
Nov 29 Python
使用 Python 遍历目录树的方法
Feb 29 Python
python opencv 检测移动物体并截图保存实例
Mar 10 Python
python操作ini类型配置文件的实例教程
Oct 30 Python
Python写情书? 10行代码展示如何把情书写在她的照片里
Apr 21 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 Mysql类 可以参考学习熟悉下
2009/06/21 PHP
PHP微信红包生成代码分享
2016/10/06 PHP
php连接mysql数据库最简单的实现方法
2019/09/24 PHP
jquery 仿QQ校友的DIV模拟窗口效果源码
2010/03/24 Javascript
深入理解javascript学习笔记(一) 编写高质量代码
2012/08/09 Javascript
jQuery 数据缓存模块进化史详细介绍
2012/11/19 Javascript
javascript验证只能输入数字和一个小数点示例
2013/10/21 Javascript
jQuery实现菜单感应鼠标滑动动画效果的方法
2015/02/28 Javascript
原生javascript实现分享到朋友圈功能 支持ios和android
2016/05/11 Javascript
TableSort.js表格排序插件使用方法详解
2017/02/10 Javascript
详细AngularJs4的图片剪裁组件的实例
2017/07/12 Javascript
JS动态添加元素及绑定事件造成程序重复执行解决
2017/12/07 Javascript
浅谈react-router HashRouter和BrowserRouter的使用
2017/12/29 Javascript
vue router嵌套路由在history模式下刷新无法渲染页面问题的解决方法
2018/01/25 Javascript
jQuery实现表单动态添加与删除数据操作示例
2018/07/03 jQuery
Angular动画实现的2种方式以及添加购物车动画实例代码
2018/08/09 Javascript
nodejs图片处理工具gm用法小结
2018/12/12 NodeJs
如何在Angular8.0下使用ngx-translate进行国际化配置
2019/07/24 Javascript
p5.js实现故宫橘猫赏秋图动画
2019/10/23 Javascript
vscode 配置vue+vetur+eslint+prettier自动格式化功能
2020/03/23 Javascript
[02:43]DOTA2英雄基础教程 圣堂刺客
2013/12/09 DOTA
Python装饰器实现几类验证功能做法实例
2017/05/18 Python
TensorFlow模型保存和提取的方法
2018/03/08 Python
ubuntu 16.04下python版本切换的方法
2019/06/14 Python
基于Django实现日志记录报错信息
2019/12/17 Python
pytorch数据预处理错误的解决
2020/02/20 Python
Python列表去重复项的N种方法(实例代码)
2020/05/12 Python
python怎么对数字进行过滤
2020/07/05 Python
CSS3实现翘边的阴影效果的代码示例
2016/06/13 HTML / CSS
安全的后院和健身蹦床:JumpSport
2019/07/15 全球购物
企业安全生产标语
2014/06/06 职场文书
青年文明号口号
2014/06/17 职场文书
个人股份转让协议书范本
2015/01/28 职场文书
接待员岗位职责
2015/02/13 职场文书
公司奖励通知
2015/04/21 职场文书
mysql 索引合并的使用
2021/08/30 MySQL