国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

python2與python3中關于對NaN類型數據的判斷和轉換方法

2020-01-04 14:11:15
字體:
來源:轉載
供稿:網友

今天在對一堆新數據進行數據清洗的時候,遇到了一個這樣的問題:

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)  FalseFalseTrueTrue

因此,通過每個元素與自身比較就可以解決了,代碼如下:

year = []for y in df.year: if y == y:  year.append(int(y)) else:  year.append(0)

以上這篇python2與python3中關于對NaN類型數據的判斷和轉換方法就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持VEVB武林網。


注:相關教程知識閱讀請移步到python教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 盐山县| 九寨沟县| 临城县| 巴彦淖尔市| 文昌市| 蓝山县| 博爱县| 会同县| 宁津县| 岐山县| 鸡东县| 银川市| 洮南市| 额尔古纳市| 思南县| 普宁市| 襄樊市| 万宁市| 天长市| 金寨县| 彰武县| 隆回县| 福州市| 雷波县| 齐齐哈尔市| 西丰县| 嘉定区| 聊城市| 当阳市| 色达县| 左权县| 巢湖市| 密山市| 邢台市| 芷江| 许昌市| 双柏县| 廊坊市| 怀宁县| 荣昌县| 平顺县|