我有一個dtype = object的數組,其值爲Python列表或np.nan
。如何將(dtype = object)numpy數組值設置爲Python列表,而不用numpy將列表解釋爲值列表?
我想用[無](而不是無)替換值爲np.nan
。
對於一個純Python列表,我已經可以用[ x if (x is not np.nan) else [None] for x in s ]
做到這一點,並且將數組轉換爲列表對我的目的來說很好,但出於好奇,我不知道如何用一個numpy數組完成這項工作。困難在於,當使用索引時,numpy會嘗試將任何列表解釋爲值列表,而不是我想要分配的實際值。
例如,如果我想用2
替換這些值,那很容易(正常np,pd imports;順便說一句,np.isnan在這種情況下不起作用,這是一個弱點,在大熊貓一般的缺失值,所以我用pd.isnull,因爲這是與大熊貓內部的問題,反正):
In [53]: s
Out[53]:
array([['asdf', 'asdf'], ['asdf'], nan, ['asdf', 'asdf', 'asdf'],
['asdf', 'asdf', 'asdf']], dtype=object)
In [55]: s[pd.isnull(s)] = 2
In [56]: s
Out[56]:
array([['asdf', 'asdf'], ['asdf'], 2, ['asdf', 'asdf', 'asdf'],
['asdf', 'asdf', 'asdf']], dtype=object)
然而,試圖與以取代他們[無],而不是取代他們無:
In [58]: s
Out[58]:
array([['asdf', 'asdf'], ['asdf'], nan, ['asdf', 'asdf', 'asdf'],
['asdf', 'asdf', 'asdf']], dtype=object)
In [59]: s[pd.isnull(s)] = [None]
In [60]: s
Out[60]:
array([['asdf', 'asdf'], ['asdf'], None, ['asdf', 'asdf', 'asdf'],
['asdf', 'asdf', 'asdf']], dtype=object)
這顯然是人們想要的行爲99%的時間。恰巧這次發生,我想把這個列表作爲一個對象。有沒有辦法做到這一點?
你總是可以明確地包裹列表向上的恰好一個對象的標量數組成爲一個列表,就像你自己包裹了's'一樣。但這太可怕了,希望有人有更好的答案...... – abarnert
如果你的元素的_all_是'list's,你可以用[[:] = ...'來修改這個列表),但是很遺憾這在這裏不會有幫助,因爲你很明顯不能將'nan'變成'[None]'。 – abarnert