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实现批量把SVG格式转成png、pdf格式的代码分享
Aug 21 Python
在Linux命令行终端中使用python的简单方法(推荐)
Jan 23 Python
Python连接数据库学习之DB-API详解
Feb 07 Python
python使用sqlite3时游标使用方法
Mar 13 Python
Python cookbook(数据结构与算法)从字典中提取子集的方法示例
Mar 22 Python
.dcm格式文件软件读取及python处理详解
Jan 16 Python
在TensorFlow中屏蔽warning的方式
Feb 04 Python
基于python纯函数实现井字棋游戏
May 27 Python
基于Python实现2种反转链表方法代码实例
Jul 06 Python
Java byte数组操纵方式代码实例解析
Jul 22 Python
Django自带用户认证系统使用方法解析
Nov 12 Python
Django分页器的用法你都了解吗
May 26 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简单封装了一些常用JS操作
2007/02/25 PHP
php中大括号作用介绍
2012/03/22 PHP
ThinkPHP在新浪SAE平台的部署实例
2014/10/31 PHP
PHP输入流php://input实例讲解
2015/12/22 PHP
apache集成php7.3.5的详细步骤
2019/06/20 PHP
载入进度条 效果
2006/07/08 Javascript
JavaScript CSS菜单功能 改进版
2008/12/20 Javascript
javascript window.opener的用法分析
2010/04/07 Javascript
javascript 冒泡排序 正序和倒序实现代码
2010/12/14 Javascript
DWR实现模拟Google搜索效果实现原理及代码
2013/01/30 Javascript
php读取sqlite数据库入门实例代码
2014/06/25 Javascript
javascript控制台详解
2015/06/25 Javascript
js图片轮播手动切换效果
2015/11/10 Javascript
解决JS无法调用Controller问题的方法
2015/12/31 Javascript
利用jQuery.Validate异步验证用户名是否存在(推荐)
2016/12/09 Javascript
react-native 完整实现登录功能的示例代码
2017/09/11 Javascript
jQuery实现滚动效果
2017/11/17 jQuery
layui table表格数据的新增,修改,删除,查询,双击获取行数据方式
2019/11/14 Javascript
javascript中的with语句学习笔记及用法
2020/02/17 Javascript
Vue常用的全选/反选的示例代码
2020/02/19 Javascript
JavaScript禁止右击保存图片,禁止拖拽图片的实现代码
2020/04/28 Javascript
VSCode搭建React Native环境
2020/05/07 Javascript
解决idea开发遇到javascript动态添加html元素时中文乱码的问题
2020/09/29 Javascript
python之import机制详解
2014/07/03 Python
用Python代码来绘制彭罗斯点阵的教程
2015/04/03 Python
Python语言描述连续子数组的最大和
2018/01/04 Python
python如何爬取个性签名
2018/06/19 Python
Python3中内置类型bytes和str用法及byte和string之间各种编码转换 问题
2018/09/27 Python
python多线程抽象编程模型详解
2019/03/20 Python
Python实现生成密码字典的方法示例
2019/09/02 Python
Python xlrd模块导入过程及常用操作
2020/06/10 Python
Python 列表中的修改、添加和删除元素的实现
2020/06/11 Python
美国最大的宠物用品零售商:PetSmart
2016/11/14 全球购物
一道Delphi上机题
2012/06/04 面试题
国际经济与贸易专业大学生职业规划书
2014/03/01 职场文书
高中生学习计划书
2014/09/15 职场文书