我有一个380行20列的表格。我想从该表中删除符合特定条件的行。
为了澄清问题,假设我有以下列表:
names = ['John', 'Amy', 'Daniel']
我想删除在列表名称
中找到姓名的所有人员的数据。
例如,假设我的数据如下所示:
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文件时,我可以看到数据没有被删除。
我可以肯定错误在< code > if data[row][0]= =(I for I in names):我该如何修复这个问题?
if data[row][0] == (i for i in names):
print 'removing the data of', i, '...'
在该部分中,i
在(i for i in name)
中用作本地可验证。但在下一个打印行中,您使用i
。在这里您不能使用这个。
您可以使用检查,就好像名称中的数据[行][0]一样:
您可以尝试如下操作:
if data[row][0] == names:
print 'removing the data of', data[row][0], '...'
您正在检查数据[row][0]
是否与(i表示名称中的i)
。您要做的是检查它是否与<code>(名称中的i表示i)
any([data[row][0]==i for i in names])
您也可以使用运算符中的<code>以非荒谬的方式执行:
data[row][0] in names
这将检查name
的任何元素是否与data[row][0]
相同。
条件应写为:
if data[row][0] in names:
在您当前的代码中,<code>(i代表名称中的i)
>>> (i for i in names)
<generator object <genexpr> at 0x1060564b0>
>>> 'John' == (i for i in names)
False
>>>
相反,您可以测试项目是否在列表中,如下所示
>>> names = ['John', 'Amy', 'Daniel']
>>> 'John' in names
True
>>> 'Bob' in names
False
>>>
如注释中所述,通过在迭代行之前将名称
转换为集合
,可以使此检查更加高效。但理想情况下,您将使用熊猫库来操作csv /表数据。有关类似示例,请参阅此答案。您可以使用 df[~df.名称.
问题内容: 目前无法打破此循环。如果要在此列表中找不到变量,我想破坏它,以便它可以移动另外两个循环。它期望在循环的顶部有一个缩进的块,但是如果更改循环的开头或开头的位置,它将无法正常工作。救命! 问题答案: 正如人们在对您的问题的评论中提到的那样,您需要分别打破每个循环,仅停止其所在的循环 两个 循环都需要这样做 如果您也想打破while循环,那么您也可以添加该循环。
问题内容: 可以说我必须在for循环内使用if语句,并且for循环在特定条件下触发,而if语句仅在for循环达到特定阶段时才触发。 例如,条件是一个计数器,该计数器在发生某些事情(例如,球从屏幕上掉下来)时进行计数。每次球越过屏幕时,都会一圈绘制一个圆圈。当第一行中的圆圈到达屏幕的末端时,圆圈开始出现在第一行下方的第二行中。但是第二行对我不起作用,我已经用if语句实现了。 if语句仅在第一行的球越
有人能帮我找出为什么Instachat:Stick\u out\u舌头\u winking\u eye:'和'Docs To Go'的代码没有返回False吗™ 免费办公套房'?它们包含Unicode大于127的字符(分别为emoji和TM),因此从技术上讲,这两个字符都应该返回False。 我不明白为什么else条款在这里不起作用。 下面应该是我的代码的预期输出:True False 然而,实际
这个程序基本上允许用户输入任何单词,直到他/她输入单词“last”。 如果单词包含字母“s”,则应显示单词确实包含“s”或“s”,否则应显示单词不包含“s”或“s”。 示例:用户输入的单词= •约翰 詹姆斯 •馅饼 莎莉 结果: 约翰不包含's'或'S' James确实包含“s”或“s” 馅饼不含's'或'S' Sally不包含“s”或“s” 该程序可以工作,但我需要更改if语句,以便它使用equ
问题内容: 因此,我正在为不和谐而开发一个聊天机器人,现在正在开发一个可以用作待办事项列表的功能。我有一个命令可以将任务添加到列表中,并将它们存储在字典中。但是,我的问题是以更易读的格式返回列表(参见图片)。 任务存储在一个称为中。但是,为了使bot实际发送消息,我需要使用一条语句,否则它将仅将其打印到控制台而不是实际的聊天记录(参见图片)。 这是我尝试解决的方法,但是由于我使用了for循环,因此
着色器语言GLSL中关于if语句、for语句的使用,和javascript语言、C语言中的if语句、for语句执行逻辑规则基本一致,这里默认你已经有一定的编程基础,也就不做过多讲解,只是简单说明一下。 单独使用if if(x>100){ gl_FragColor = vec4(1.0,0.0,0.0,1.0);//红色 } if-else形式 bool colorBool; // 根据布尔值