我有一个包含 0 的列表,我想将其更改为 np.nan 以进行计算。我正在尝试执行仅替换前 0 的以下操作:
l = [0,2,3,4,0]
l[l == 0] = np.nan
print l
[nan,2,3,4,0]
有没有办法对列表中的每一项进行这种替换?
请您参考如下方法:
您不能使用 numpy 向量 bool 索引或与 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 数组,则向量比较和赋值会有效,但您不能将整数和 float (例如 np.nan)混合得太好。)
