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实现得到一个给定类的虚函数
Sep 28 Python
python爬取51job中hr的邮箱
May 14 Python
详解python 发送邮件实例代码
Dec 22 Python
Python实现找出数组中第2大数字的方法示例
Mar 26 Python
Python字符串、整数、和浮点型数相互转换实例
Aug 04 Python
python3去掉string中的标点符号方法
Jan 22 Python
TensorFlow实现打印每一层的输出
Jan 21 Python
Python中Selenium库使用教程详解
Jul 23 Python
浅谈python锁与死锁问题
Aug 14 Python
Python爬虫制作翻译程序的示例代码
Feb 22 Python
python利用后缀表达式实现计算器功能
Feb 22 Python
Python超详细分步解析随机漫步
Mar 17 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去掉URL网址中带有PHPSESSID的配置方法
2014/07/08 PHP
CI分页类首页、尾页不显示的解决方法
2016/03/28 PHP
PHP中的密码加密的解决方案总结
2016/10/26 PHP
PHP实现创建微信自定义菜单的方法示例
2017/07/14 PHP
thinkphp5框架扩展redis类方法示例
2019/05/06 PHP
PHP使用ajax的post方式下载excel文件简单示例
2019/08/06 PHP
Laravel框架实现文件上传的方法分析
2019/09/29 PHP
MacOS下PHP7.1升级到PHP7.4.15的方法
2021/02/22 PHP
javascript 动态参数判空操作
2008/12/22 Javascript
jquery实现加载等待效果示例
2013/09/25 Javascript
详解Vue-cli3 项目在安卓低版本系统和IE上白屏问题解决
2019/04/14 Javascript
node.js监听文件变化的实现方法
2019/04/17 Javascript
如何提升vue.js中大型数据的性能
2019/06/21 Javascript
微信小程序中悬浮窗功能的实现代码
2019/08/02 Javascript
vue全屏事件开发详解
2020/06/17 Javascript
vue 解决uglifyjs-webpack-plugin打包出现报错的问题
2020/08/04 Javascript
Linux下Python获取IP地址的代码
2014/11/30 Python
Python+树莓派+YOLO打造一款人工智能照相机
2018/01/02 Python
纯python实现机器学习之kNN算法示例
2018/03/01 Python
python3.6数独问题的解决
2019/01/21 Python
python实现给微信指定好友定时发送消息
2019/04/29 Python
python实现文本进度条 程序进度条 加载进度条 单行刷新功能
2019/07/03 Python
基于keras 模型、结构、权重保存的实现
2020/01/24 Python
Django Admin设置应用程序及模型顺序方法详解
2020/04/01 Python
Ratchet 模态框的实现
2020/08/19 HTML / CSS
芬兰灯具网上商店:Nettilamppu.fi
2018/06/30 全球购物
Shein英国:女性时尚网上商店
2019/04/10 全球购物
家乐福台湾线上购物网:Carrefour台湾
2020/09/15 全球购物
类和结构的区别
2012/08/15 面试题
领导干部作风整顿个人剖析材料
2014/10/11 职场文书
2014年银行客户经理工作总结
2014/11/12 职场文书
辞职信格式模板
2015/02/27 职场文书
2015年秋季小学开学标语
2015/07/16 职场文书
详解Python requests模块
2021/06/21 Python
linux下安装redis图文详细步骤
2021/12/04 Redis
高通2023 年将发布高性能PC处理器
2022/04/29 数码科技