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文件读取的3种方法及路径转义
Jun 21 Python
深入理解NumPy简明教程---数组1
Dec 17 Python
Python get获取页面cookie代码实例
Sep 12 Python
python实现windows壁纸定期更换功能
Jan 21 Python
Python List cmp()知识点总结
Feb 18 Python
python绘制漏斗图步骤详解
Mar 04 Python
python抓取搜狗微信公众号文章
Apr 01 Python
django 配置阿里云OSS存储media文件的例子
Aug 20 Python
Django发送邮件功能实例详解
Sep 02 Python
python 使用pygame工具包实现贪吃蛇游戏(多彩版)
Oct 30 Python
使用 PyTorch 实现 MLP 并在 MNIST 数据集上验证方式
Jan 08 Python
Python趣味实战之手把手教你实现举牌小人生成器
Jun 07 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
Laravel中基于Artisan View扩展包创建及删除应用视图文件的方法
2016/10/08 PHP
PHP下载文件函数与用法示例
2019/09/27 PHP
jQuery源码分析-02正则表达式 RegExp 常用正则表达式
2011/11/14 Javascript
JQuery右键菜单插件ContextMenu使用指南
2014/12/19 Javascript
原生javascript实现图片滚动、延时加载功能
2015/01/12 Javascript
EasyUI实现第二层弹出框的方法
2015/03/01 Javascript
JS实现动态给图片添加边框的方法
2015/04/01 Javascript
js实现简易的单数字随机抽奖(0-9)
2020/03/19 Javascript
jQuery实现图片局部放大镜效果
2016/03/17 Javascript
JQuery获取鼠标进入和离开容器的方向
2016/12/29 Javascript
vue.js加载新的内容(实例代码)
2017/06/01 Javascript
详解Node.js读写中文内容文件操作
2018/10/10 Javascript
Vue利用History记录上一页面的数据方法实例
2018/11/02 Javascript
Node.js开发之套接字(socket)编程入门示例
2019/11/05 Javascript
javascript 对象 与 prototype 原型用法实例分析
2019/11/11 Javascript
Vue+Element UI 树形控件整合下拉功能菜单(tree + dropdown +input)
2020/08/28 Javascript
three.js中多线程的使用及性能测试详解
2021/01/07 Javascript
利用 Chrome Dev Tools 进行页面性能分析的步骤说明(前端性能优化)
2021/02/24 Javascript
Python入门教程之if语句的用法
2015/05/14 Python
Mac 上切换Python多版本
2017/06/17 Python
selenium python 实现基本自动化测试的示例代码
2019/02/25 Python
Python字典对象实现原理详解
2019/07/01 Python
flask 实现上传图片并缩放作为头像的例子
2020/01/09 Python
django 数据库 get_or_create函数返回值是tuple的问题
2020/05/15 Python
自学python用什么系统好
2020/06/23 Python
详解Selenium 元素定位和WebDriver常用方法
2020/12/04 Python
tensorflow2.0教程之Keras快速入门
2021/02/20 Python
一个精品风格的世界:Atterley
2019/05/01 全球购物
迪卡侬比利时官网:Decathlon比利时
2019/12/28 全球购物
考试作弊被抓检讨书
2014/10/02 职场文书
公安机关纪律作风整顿个人剖析材料材料
2014/10/10 职场文书
毕业生银行实习自我鉴定
2014/10/14 职场文书
六一文艺汇演主持词
2015/06/30 职场文书
2016大学生社会实践单位评语
2015/12/01 职场文书
Python源码解析之List
2021/05/21 Python
动态规划之使用备忘录来改进Javascript函数
2022/04/07 Javascript