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

作者:敲代码的quant 时间:2022-07-19 00:24:03 

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


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)

来源:https://blog.csdn.net/FrankieHello/article/details/79459645

标签:python2,python3,NaN,转换
0
投稿

猜你喜欢

  • MSSQL数据加密解密代码

    2023-07-08 18:45:30
  • PyQt4 treewidget 选择改变颜色,并设置可编辑的方法

    2021-05-26 23:15:11
  • 实例讲解Python中整数的最大值输出

    2021-12-20 22:04:39
  • Javascript 动画初探(实现)

    2009-02-06 15:56:00
  • python字典多条件排序方法实例

    2023-06-22 03:43:07
  • python实现m3u8格式转换为mp4视频格式

    2021-05-09 00:48:02
  • Python函数参数类型*、**的区别

    2022-03-01 18:09:54
  • pytorch超详细安装教程之Anaconda、PyTorch和PyCharm全套安装流程

    2023-12-23 15:27:50
  • python用WxPython库实现无边框窗体和透明窗体实现方法详解

    2021-09-04 18:48:45
  • 详解Python进阶之切片的误区与高级用法

    2022-09-18 04:03:12
  • 费茨法则在交互设计中的应用

    2009-07-09 19:02:00
  • Python实现的HMacMD5加密算法示例

    2022-01-15 06:05:31
  • pytorch常用函数定义及resnet模型修改实例

    2022-09-18 08:19:19
  • Python编程实现数学运算求一元二次方程的实根算法示例

    2023-08-08 05:38:40
  • Flask框架工厂函数用法实例分析

    2023-03-08 08:14:30
  • Python爬虫之BeautifulSoup的基本使用教程

    2022-03-27 18:35:31
  • Python使用pickle模块存储数据报错解决示例代码

    2023-12-10 02:05:05
  • 深入了解Python Opencv数据增强

    2023-10-27 05:00:01
  • Python实现绘制圣诞树和烟花的示例代码

    2022-03-22 16:22:20
  • Pytest+request+Allure实现接口自动化框架

    2023-08-12 17:29:33
  • asp之家 网络编程 m.aspxhome.com