我有一个由380行20列组成的表。我想按照某个条件从此表中删除行。你知道吗
为了澄清问题,假设我有以下清单:
names = ['John', 'Amy', 'Daniel']
我想删除在列表names
中找到的所有人的数据。你知道吗
例如,假设我的数据如下所示:
John 82 3.12 boy
Katy 12 1.12 girl
Amy 42 2.45 girl
Robert 32 1.56 boy
Daniel 47 2.10 boy
我想删除John
、Amy
和Daniel
的数据。所以输出应该是:
Katy 12 1.12 girl
Robert 32 1.56 boy
import csv
import numpy as np
# loading data
data = np.genfromtxt('file.txt', dtype = None)
csvfile = "home/paula/Desktop/test.txt"
with open(csvfile, 'w') as output:
writer = csv.writer(output, delimiter = '\t')
for row in range(len(data)):
if data[row][0] == (i for i in names):
print 'removing the data of', i, '...'
else:
writer.writerow([data[row][0], data[row][1],
data[row][2], data[row][3]])
我的代码正在工作,但是数据没有从原始数据中删除。当我打开新的测试.txt文件,我可以看到数据没有被删除。你知道吗
我确信这个bug在if data[row][0] == (i for i in names):
我怎样才能解决这个问题?你知道吗
在这一部分中,
i
在(i for i in names)
中用作本地验证。但在下一个打印行中使用i
。这里你不能用这个。你知道吗您可以使用for check作为
if data[row][0] in names:
。您可以尝试以下方式:条件应写为:
在当前代码中,
(i for i in names)
创建一个生成器,然后测试字符串是否等于生成器对象,这将是false相反,您可以测试项目是否在列表中,如下所示
如注释中所述,您可以通过在遍历行之前将
names
转换为set
来提高此检查的效率。但理想情况下,您可以使用Pandas库来操作csv/表数据。类似的例子见this answer。你可以用df[~df.Name.isin(...)]
来否定这个条件。你知道吗您正在检查
data[row][0]
是否与(i for i in names)
相同。您要做的是检查它是否与(i for i in names)
的元素相同。你可以这样做:您也可以使用
in
操作符以非荒谬的方式进行操作:这将检查
names
的任何元素是否与data[row][0]
相同。你知道吗相关问题 更多 >
编程相关推荐