用numpy.nan替换列表中的所有0

The*_*ark 1 python list

我有一个0的列表,我想改为np.nan进行计算.我试图做以下只替换前0:

l = [0,2,3,4,0]
l[l == 0] = np.nan
print l
[nan,2,3,4,0]
Run Code Online (Sandbox Code Playgroud)

有没有办法对列表中的每个项目进行替换?

小智 5

你可以使用内置的地图:

l = map(lambda number: np.nan if number == 0 else number, l)
Run Code Online (Sandbox Code Playgroud)

这相当于:

for i in range(len(l)):
    l[i] = 0 if l[i] == np.nan else l[i]
Run Code Online (Sandbox Code Playgroud)


DSM*_*DSM 5

您不能将numpy向量布尔值索引或与Python列表进行比较,因此您l == 0只能给您0。这只是a幸,它甚至可以部分工作,因为您碰巧将0作为第一个元素。

>>> l = [0,2,3,4,0]
>>> l == 0
False
>>> int(l == 0)
0
>>> l[l == 0] = 999
>>> l
[999, 2, 3, 4, 0]
Run Code Online (Sandbox Code Playgroud)

您可以使用列表推导和三进制:

>>> l = [0,2,3,4,0]
>>> l = [np.nan if x == 0 else x for x in l]
>>> l
[nan, 2, 3, 4, nan]
Run Code Online (Sandbox Code Playgroud)

(如果你用工作numpy的数组,向量比较和分配工作,但你不能太漂亮混合整数和浮点数(如np.nan)。)