說我在python中有一個列表:a = [1,2,3,4,None]。假設我只想對不等於None的元素運行sklearn.preprocessing.scale。直接在列表中運行此功能會給出錯誤消息。僅在非none列表的元素上運行函數
有沒有辦法做到這一點,而不必手動做到這一點?我想要的功能與pandas中的.fillna()方法類似,您可以在忽略非null元素的數據框上運行函數,然後再替換它們。謝謝。
說我在python中有一個列表:a = [1,2,3,4,None]。假設我只想對不等於None的元素運行sklearn.preprocessing.scale。直接在列表中運行此功能會給出錯誤消息。僅在非none列表的元素上運行函數
有沒有辦法做到這一點,而不必手動做到這一點?我想要的功能與pandas中的.fillna()方法類似,您可以在忽略非null元素的數據框上運行函數,然後再替換它們。謝謝。
我不熟悉sklearn.preprocessing.scale()
,但它似乎是一個for
循環應該工作:
for i in a:
if i is not None:
#your code here#
result = sklearn.preprocessing.scale(filter(None,a))
應該做的正是你所要求的(以及過濾掉任何falsey值)
注意,這隻會如果你想爲一個一維列表
我想工作與標量和諾內斯原單回
r = iter(result) #result from above
my_new_a = [None if not v else next(r) for v in a]
但是不會過濾也刪除列表中的空元素?我想讓他們留在原來的位置。 – Alex
a沒有變化... –
@PeterDeGlopper我幾乎把這樣的東西,但認爲不能是OP想要的東西。 .. –
如果您使用sklearn
,沒準你可能要與numpy的陣列來工作,而不是Python列表:
>>> x = np.array([1, 2, 3, 4, None], dtype=float)
>>> ix = ~np.isnan(x)
>>> x[ix] = sklearn.preprocessing.scale(x[ix])
>>> x
array([-1.34164079, -0.4472136 , 0.4472136 , 1.34164079, nan])
謝謝;這非常有幫助。 – Alex
爲什麼不過濾列表,然後運行該功能? – axiom