python2与python3中关于对NaN类型数据的判断和转换方法

 更新时间:2018年10月30日 10:00:33   作者:敲代码的quant  
今天小编就为大家分享一篇python2与python3中关于对NaN类型数据的判断和转换方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

今天在对一堆新数据进行数据清洗的时候,遇到了一个这样的问题:

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的Django框架代码的一些示例

    简化Python的Django框架代码的一些示例

    这篇文章主要介绍了简化Python的Django框架代码的一些示例,实际上文中只是抽取了一些Django中最基本的功能用于简化入门者的上手复杂度,下,需要的朋友可以参考下
    2015-04-04
  • Python经纬度坐标转换为距离及角度的实现

    Python经纬度坐标转换为距离及角度的实现

    这篇文章主要介绍了Python经纬度坐标转换为距离及角度的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11
  • Python中的super用法详解

    Python中的super用法详解

    这篇文章主要介绍了Python中的super用法详解,本文讲解了关于super问题的发现与提出、走进Python的源码世界分析super的实现、延续的讨论super等内容,需要的朋友可以参考下
    2015-05-05
  • python 使用sys.stdin和fileinput读入标准输入的方法

    python 使用sys.stdin和fileinput读入标准输入的方法

    今天小编就为大家分享一篇python 使用sys.stdin和fileinput读入标准输入的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-10-10
  • python 爬取B站原视频的实例代码

    python 爬取B站原视频的实例代码

    这篇文章主要介绍了python 爬取B站原视频的实例代码,帮助大家更好的理解和使用python 爬虫,感兴趣的朋友可以了解下
    2020-09-09
  • 利用Python如何批量更新服务器文件

    利用Python如何批量更新服务器文件

    这篇文章主要给大家介绍了关于利用Python如何批量更新服务器文件的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用python具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-07-07
  • NumPy性能优化的实例技巧

    NumPy性能优化的实例技巧

    NumPy 提供了一些工具和技巧,帮助用户优化代码以提高执行效率,本文主要介绍了NumPy性能优化,具有一定的参考价值,感兴趣的可以了解一下
    2024-01-01
  • 提升Python代码质量巧妙整理包引入顺序

    提升Python代码质量巧妙整理包引入顺序

    在Python编程中,优化导入包的顺序可以提高代码的可读性、可维护性和性能,一个良好的导入顺序不仅使代码更易于理解,还可以帮助减少潜在的循环依赖和提高导入速度,本文将介绍如何快速、有效地优化Python导入包的顺序,并提供丰富的示例代码以帮助更好地理解
    2024-01-01
  • python实现tail -f 功能

    python实现tail -f 功能

    这篇文章主要介绍了python实现tail -f 功能,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-01-01
  • 在Mac OS上使用mod_wsgi连接Python与Apache服务器

    在Mac OS上使用mod_wsgi连接Python与Apache服务器

    这篇文章主要介绍了在Mac OS上使用mod_wsgi连接Python与Apache服务器的方法,同时文中还介绍了使用Python的Django框架时mod_wsgi连接方式下可能遇到的问题的一般解决方法,需要的朋友可以参考下
    2015-12-12

最新评论