我有一个包含0的列表,我想将其更改为np.nan以进行计算。我试图做以下只替换第一个0:
l = [0,2,3,4,0]
l[l == 0] = np.nan
print l
[nan,2,3,4,0]
有没有办法对列表中的每个项目进行替换?
答案 0 :(得分:5)
您可以使用内置地图:
l = map(lambda number: np.nan if number == 0 else number, l)
相当于:
for i in range(len(l)):
l[i] = 0 if l[i] == np.nan else l[i]
答案 1 :(得分:3)
你不能使用numpy向量布尔索引或与Python列表进行比较,所以你的l == 0
只是给你0.它只是一个侥幸它甚至部分工作,因为你碰巧有0作为第一个元件。
>>> l = [0,2,3,4,0]
>>> l == 0
False
>>> int(l == 0)
0
>>> l[l == 0] = 999
>>> l
[999, 2, 3, 4, 0]
你可以使用列表理解和三元:
>>> l = [0,2,3,4,0]
>>> l = [np.nan if x == 0 else x for x in l]
>>> l
[nan, 2, 3, 4, nan]
(如果你正在使用numpy数组,矢量比较和赋值将工作,但是你不能很好地混合整数和浮点数(例如np.nan)。)
答案 2 :(得分:0)
这是一个很好的方式:
l = [x or np.nan for x in l]
答案 3 :(得分:0)
由于你已经在使用numpy:如果l
是numpy.array而不是列表,那么你的符号是有效的。但是,只有当您的条目不是整数时,它才有效。浮:
array = np.array(list, dtype=float)
array[array == 0] = np.nan
现在数组看起来像这样:
array([ nan, 2., 3., 4., nan])
如果你真的需要一个清单,那么
l = list(array)