2016-08-15 61 views
1

我有以下列表中的Python:將NaN和字符串列表轉換爲int?

mylist = [float('NaN'), u'2', u'3', u'1', u'4', u'1/2', u'2/3', u'0'] 

我想一切轉換爲int。我想用斜線字符串取第一個值。

這是我已經試過:

newlist = [int(str(x).split('/')[0]) for x in mylist] 

但這並不對NaN價值的工作。處理字符串和NaN值的最佳方法是什麼?

+2

你想要的NaN轉換爲int。那麼你想讓NaN轉換成什麼樣的int? – khelwood

+0

@ khelwood:人們可能會問它應該是什麼樣的浮動,但它確實是一個浮動。 – zondo

+0

@zondo可以,但它已經是一個浮點數了,他試圖將它轉換爲int。 – khelwood

回答

0

pandas.isnull另一種解決方案:

import pandas as pd 
import numpy as np 

mylist = [np.nan, u'2', u'3', u'1', u'4', u'1/2', u'2/3', u'0'] 

newList = [0 if pd.isnull(item) else int(str(item).split('/')[0]) for item in mylist] 
print(newList) 
[0, 2, 3, 1, 4, 1, 2, 0] 

大熊貓的解決方案替代NaN'0'通過Series.fillna,由str.split劈裂,得到名單的第一要素由str[0]和鑄造用astype

mylist = [np.nan, u'2', u'3', u'1', u'4', u'1/2', u'2/3', u'0'] 

newList = pd.Series(mylist).fillna('0').str.split('/').str[0].astype(int) 
print(newList) 
0 0 
1 2 
2 3 
3 1 
4 4 
5 1 
6 2 
7 0 
dtype: int32 

print(newList.tolist()) 
[0, 2, 3, 1, 4, 1, 2, 0] 
1

您可以在數學庫中使用isnan函數來檢查一個浮點數是否爲NaN,但是它將浮點數作爲參數,因此您必須首先將您的項目轉換爲浮點數。您可以選擇是否跳過NaN,或將它們保存爲某個默認值。在下面的NaN的代碼保存爲INT 0

import math 

mylist = [float('NaN'), u'2', u'3', u'1', u'4', u'1/2', u'2/3', u'0'] 

newlist = [] 

for item in mylist: 

    x = float(str(item).split('/')[0]) 

    if not math.isnan(x): 
     newlist.append(int(x)) 
    else: 
     newlist.append(0) 

print newlist 
0

我們知道,楠永遠!= NaN的
用下面的辦法一切轉換成整數

mylist = [float('NaN'), u'2', u'3', u'1', u'4', u'1/2', u'2/3', u'0'] 
newList = [0 if (not item or (item != item)) else int(str(item).split('/')[0]) for item in mylist] 
print(newList) 

輸出:

[0, 2, 3, 1, 4, 1, 2, 0]