我是一名蟒蛇初学者。我在包含我的x和y值的文本文件(.txt)中给出的数据。 x和y值以制表符分隔。
(x values) (y values)
113 0
116 2
119 0
214 3
220 0
230 3
290 5
我的任务是在y值为0时删除x和y值。
import numpy as np
files = ['my_data.txt']
for file in files:
data = np.loadtxt(file,unpack=True)
y_value = data[1,0:]
y_list= list(y_value)
a= np.where(y_list==0)
b = str(a)
d= del.y_list(b)
我尝试做的是识别包含零的索引,并根据索引删除这些元素。给定的代码似乎不起作用。错误消息显示d= del.y_list(b)
包含无效语法。
有人可以解释d= del.y_list(b)
出了什么问题吗?或者,请随意分享任何其他更有效的方法来完成任务。
(上面的代码描述了仅从y中删除零元素。我认为如果这适用于y值,我可以使用data[0,0:]
重新调用x值。)
答案 0 :(得分:5)
编译器说:
del.y_list(b)
语法无效。通常一个人写道:
del variable
del variable[index]
del variable.attribute
删除该变量的变量,索引或属性。然而,我不明白为什么你这么努力。你可以简单地写一下:
import numpy as np
files = ['my_data.txt']
for file in files:
data = np.loadtxt(file,unpack=True)
data_filtered = data[:,data[1,:] != 0]
现在data_filtered
将包含 numpy矩阵,只包含y
不等于零的行。这将是有效的,而且你仍然可以对该矩阵执行各种操作,因为它是一个numpy矩阵。
对于您的样本输入,这会生成:
>>> data[:,data[1,:] != 0]
array([[ 116., 214., 230., 290.],
[ 2., 3., 3., 5.]])
答案 1 :(得分:1)
这是因为您使用del
错误。相反,请尝试以下方法:
result = []
with open('my_data.txt', 'r+') as f:
for line in f:
if not any([item == 0 for item in line.split()]):
result.append(line)
f.write(''.join(result))