我有一个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)
您不能将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)。)
| 归档时间: |
|
| 查看次数: |
3211 次 |
| 最近记录: |