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(一)Python环境安装
Aug 20 Python
Python中pip安装非PyPI官网第三方库的方法
Jun 02 Python
Python中方法链的使用方法
Feb 23 Python
python如何获取服务器硬件信息
May 11 Python
python中的字典操作及字典函数
Jan 03 Python
python3利用Dlib19.7实现人脸68个特征点标定
Feb 26 Python
对Pandas MultiIndex(多重索引)详解
Nov 16 Python
tensorboard显示空白的解决
Feb 15 Python
Python定时任务APScheduler原理及实例解析
May 30 Python
浅谈matplotlib 绘制梯度下降求解过程
Jul 12 Python
Python连接mysql方法及常用参数
Sep 01 Python
pandas求平均数和中位数的方法实例
Aug 04 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 删除一个数组中的某个值.兼容多维数组!
2012/02/18 PHP
php explode函数实例代码
2012/02/27 PHP
解析PHP处理换行符的问题 \r\n
2013/06/13 PHP
php+mysql开发的最简单在线题库(在线做题系统)完整案例
2019/03/30 PHP
jQuery 绑定事件到动态创建的元素上的方法实例
2013/08/18 Javascript
JavaScript数据结构与算法之栈详解
2015/03/12 Javascript
js字符串操作方法实例分析
2015/05/06 Javascript
js实现按钮颜色渐变动画效果
2015/08/20 Javascript
jQuery表格插件datatables用法详解
2020/11/23 Javascript
利用JS判断字符串是否含有数字与特殊字符的方法小结
2016/11/25 Javascript
BootStrap Table 设置height表头与内容无法对齐的问题
2016/12/28 Javascript
用file标签实现多图文件上传预览
2017/02/14 Javascript
javascript基本数据类型和转换
2017/03/17 Javascript
Angular指令之restict匹配模式的详解
2017/07/27 Javascript
详解Webpack loader 之 file-loader
2018/11/07 Javascript
fetch 如何实现请求数据
2018/12/20 Javascript
判断“命令按钮”是否被鼠标单击详解
2019/07/31 Javascript
[46:14]完美世界DOTA2联赛PWL S3 Magma vs INK ICE 第一场 12.11
2020/12/16 DOTA
Python bsddb模块操作Berkeley DB数据库介绍
2015/04/08 Python
使用Python脚本来控制Windows Azure的简单教程
2015/04/16 Python
Python3实现发送QQ邮件功能(附件)
2020/12/23 Python
python去除扩展名的实例讲解
2018/04/23 Python
10 行 Python 代码教你自动发送短信(不想回复工作邮件妙招)
2018/10/11 Python
Python代码一键转Jar包及Java调用Python新姿势
2020/03/10 Python
使用keras2.0 将Merge层改为函数式
2020/05/23 Python
英国50岁以上人群的交友网站:Ourtime
2018/03/28 全球购物
英国版MAC彩妆品牌:Illamasqua
2018/04/18 全球购物
高中教师先进事迹材料
2014/08/22 职场文书
2015年企业新年寄语
2014/12/08 职场文书
2014年机关工会工作总结
2014/12/19 职场文书
关于教师节的广播稿
2015/08/19 职场文书
社区宣传标语口号
2015/12/26 职场文书
区域销售大会开幕词
2016/03/04 职场文书
python实现进度条的多种实现
2021/04/29 Python
MySQL系列之十五 MySQL常用配置和性能压力测试
2021/07/02 MySQL
JavaScript实现酷炫的鼠标拖尾特效
2022/02/18 Javascript