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中的字典来处理索引统计的方法
May 05 Python
Python求出0~100以内的所有素数
Jan 23 Python
python kmeans聚类简单介绍和实现代码
Feb 23 Python
Win7 64位下python3.6.5安装配置图文教程
Oct 27 Python
Python 绘图库 Matplotlib 入门教程
Apr 19 Python
Python退火算法在高次方程的应用
Jul 26 Python
使用Python获取网段IP个数以及地址清单的方法
Nov 01 Python
Django网络框架之创建虚拟开发环境操作示例
Jun 06 Python
pytorch点乘与叉乘示例讲解
Dec 27 Python
python如何实现单链表的反转
Feb 10 Python
Python参数传递对象的引用原理解析
May 22 Python
python删除文件、清空目录的实现方法
Sep 23 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 n个不重复的随机数生成代码
2009/06/23 PHP
用PHP将数据导入到Foxmail的实现代码
2010/09/05 PHP
thinkphp 多表 事务详解
2013/06/17 PHP
解析PHP留言本模块主要功能的函数说明(代码可实现)
2013/06/25 PHP
Thinkphp单字母函数使用指南
2016/05/08 PHP
PHP文件下载实例代码浅析
2016/08/17 PHP
php is_executable判断给定文件名是否可执行实例
2016/09/26 PHP
PHP xpath提取网页数据内容代码解析
2020/07/16 PHP
linux mint下安装phpstorm2020包括JDK部分的教程详解
2020/09/17 PHP
Javascript 代码也可以变得优美的实现方法
2009/06/22 Javascript
JavaScript中setFullYear()方法的使用详解
2015/06/11 Javascript
jquery实现在网页指定区域显示自定义右键菜单效果
2015/08/25 Javascript
基于javascript简单实现对身份证校验
2021/01/25 Javascript
NodeJs——入门必看攻略
2016/06/27 NodeJs
详解使用angular-cli发布i18n多国语言Angular应用
2017/05/20 Javascript
JS抛物线动画实例制作
2018/02/24 Javascript
jquery点击回车键实现登录效果并默认焦点的方法
2018/03/09 jQuery
H5+C3+JS实现五子棋游戏(AI篇)
2020/05/28 Javascript
使用JavaScrip模拟实现仿京东搜索框功能
2019/10/16 Javascript
JS操作字符串转数字的常见方法示例
2019/10/29 Javascript
vue 使用v-for进行循环的实例代码详解
2020/02/19 Javascript
Python实现基于HTTP文件传输实例
2014/11/08 Python
几种实用的pythonic语法实例代码
2018/02/24 Python
详谈Python 窗体(tkinter)表格数据(Treeview)
2018/10/11 Python
python中os包的用法
2020/06/01 Python
Django视图、传参和forms验证操作
2020/07/15 Python
Python非单向递归函数如何返回全部结果
2020/12/18 Python
html5视频播放_动力节点Java学院整理
2017/07/13 HTML / CSS
canvas 绘图时位置偏离的问题解决
2020/09/16 HTML / CSS
办公室内勤工作职责
2013/12/11 职场文书
大型晚会策划方案
2014/02/06 职场文书
超市周年庆活动方案
2014/08/16 职场文书
红领巾心向党演讲稿
2014/09/10 职场文书
新闻发布会活动策划方案
2014/09/15 职场文书
2015年药店工作总结
2015/04/20 职场文书
OpenCV-Python实现轮廓拟合
2021/06/08 Python