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 24 Python
Python实现的朴素贝叶斯分类器示例
Jan 06 Python
pyqt 实现为长内容添加滑轮 scrollArea
Jun 19 Python
Python 共享变量加锁、释放详解
Aug 28 Python
Python单元测试模块doctest的具体使用
Feb 10 Python
win10下opencv-python特定版本手动安装与pip自动安装教程
Mar 05 Python
Python3 filecmp模块测试比较文件原理解析
Mar 23 Python
Python自省及反射原理实例详解
Jul 06 Python
10款最佳Python开发工具推荐,每一款都是神器
Oct 15 Python
Python实现自动整理文件的脚本
Dec 17 Python
python爬虫线程池案例详解(梨视频短视频爬取)
Feb 20 Python
anaconda升级sklearn版本的实现方法
Feb 22 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提高编程效率的20个要点
2015/09/23 PHP
JSON两种结构之对象和数组的理解
2016/07/19 PHP
自动检查并替换文本框内的字符
2006/06/30 Javascript
jQuery的强大选择器小结
2009/12/27 Javascript
JS高级笔记
2011/07/13 Javascript
IE8的JavaScript点击事件(onclick)不兼容的解决方法
2013/11/22 Javascript
显示今天的日期js代码(阳历和农历)
2014/09/30 Javascript
Bootstrap布局之栅格系统详解
2016/06/13 Javascript
js微信分享API
2020/10/11 Javascript
jquery实现瀑布流效果 jquery下拉加载新数据
2016/12/12 Javascript
js放大镜放大购物图片效果
2017/01/18 Javascript
Vue Transition实现类原生组件跳转过渡动画的示例
2017/08/19 Javascript
详细分析jsonp的原理和实现方式
2017/11/20 Javascript
vue2单元测试环境搭建
2018/05/24 Javascript
Iview Table组件中各种组件扩展的使用
2018/10/20 Javascript
js中arguments对象的深入理解
2019/05/14 Javascript
用原生JS实现爱奇艺首页导航栏代码实例
2019/09/19 Javascript
python批量修改文件名的实现代码
2014/09/01 Python
Python列表list操作符实例分析【标准类型操作符、切片、连接字符、列表解析、重复操作等】
2017/07/24 Python
Python通过调用mysql存储过程实现更新数据功能示例
2018/04/03 Python
Django使用Mysql数据库已经存在的数据表方法
2018/05/27 Python
NumPy.npy与pandas DataFrame的实例讲解
2018/07/09 Python
解决python ogr shp字段写入中文乱码的问题
2018/12/31 Python
python绘制已知点的坐标的直线实例
2019/07/04 Python
python3应用windows api对后台程序窗口及桌面截图并保存的方法
2019/08/27 Python
Pytorch在NLP中的简单应用详解
2020/01/08 Python
Python实现画图软件功能方法详解
2020/07/28 Python
全面介绍python中很常用的单元测试框架unitest
2020/12/14 Python
腾讯技术类校园招聘笔试试题
2014/05/06 面试题
工作的心得体会
2013/12/31 职场文书
幼儿园春游活动方案
2014/01/19 职场文书
激励口号大全
2014/06/17 职场文书
教师培训简讯
2015/07/20 职场文书
小学二年级语文教学反思
2016/03/03 职场文书
二年级作文之动物作文
2019/11/13 职场文书
win11怎么消除图标小盾牌?win11消除图标小盾牌解决方法
2022/08/05 数码科技