这是我目前的代码
y= n.genfromtxt('seguedata.txt', dtype=None, usecols = (0,1,2,5),)
for i in y:
if y[i][0] == y[i+1][0]:
y[i][1]=0
y[i][2]=0
y[i][3]=0
我收到了错误
IndexError Traceback (most recent call last)
<ipython-input-27-292d90264548> in <module>()
1 for i in y:
2 if y[i][0] == y[i+1][0]:
3 y[i][1]=0
4 y[i][2]=0
5 y[i][3]=0
IndexError: unsupported iterator index
segue数据是一个包含4列的大型数据集,其中第一列是字符串,另外3列是数字。如果两个连续的行具有相同的初始字符串,我想将第一行的值设置为零。
由于
答案 0 :(得分:2)
打印i
:
for i in y:
print(i)
你会看到它们是y
的行,而不是整数。由于y
是结构化数组,y
可以用整数或列名索引,但不能用行值的元组索引,因此y[i]
会引发错误
IndexError: unsupported iterator index
要解决问题,只需对代码进行最少的调整,就可以使用
for i in range(len(y)-1):
if y[i][0] == y[i+1][0]:
y[i][1]=0
y[i][2]=0
y[i][3]=0
应尽可能避免逐个元素地修改NumPy数组。 在整个阵列或至少大片上操作将产生更好的效果 性能
在这种情况下,找到连续相等的行会更有效 值:
mask = (y['f0'][1:] == y['f0'][:-1])
然后在mask为True的行的每列中将所有值设置为零:
mask = np.concatenate([mask, [False]])
for col in y.dtype.names[1:]:
y[col][mask] = 0