我有以下列表中的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
值的最佳方法是什麼?
我有以下列表中的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
值的最佳方法是什麼?
與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]
您可以在數學庫中使用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
我們知道,楠永遠!= 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]
你想要的NaN轉換爲int。那麼你想讓NaN轉換成什麼樣的int? – khelwood
@ khelwood:人們可能會問它應該是什麼樣的浮動,但它確實是一個浮動。 – zondo
@zondo可以,但它已經是一個浮點數了,他試圖將它轉換爲int。 – khelwood