2014-03-12 138 views
1

更新pytable再次,我需要的帮助从别人经历了PyTables ...通过选择行

我有一个PyTable(.h5文件),我有一个非常棘手的方式来更新它的行.. 。我解释...

表看起来或多或少像这样

Day attempt ok 

1  1  1 

1  2  0 

1  3  1 

2  1  1 

2  2  1 

2  3  1 

3  1  1 

3  2  1 

3  3  0 

正如你所看到的每一天有3次尝试,尝试的结果只能是0或1

主要ID如果任何一天的尝试失败(= 0),那么当天所有的尝试必须被认为失败(= 0)

在这种特殊情况下,处理后的结果PyTable看起来像:

Day attempt ok 

1  1  0 

1  2  0 #this was 0, then all 0 for day1 

1  3  0 

2  1  1 

2  2  1 

2  3  1 

3  1  0 

3  2  0 

3  3  0#this was 0, then all 0 for day 3 

我的问题是,我能找到在某一天的任何0,但我不知道如何继续行向上或向下改变特定的一天中的任何1 0

回答

0

您可以获取与一天相对应的所有行的行坐标。然后检查是否有任何尝试未成功,并替换表中的结果。

for day_number in range(3): 
    coords=table.get_where_list('day==%i'%day_number) 
    table_data=table.read_coordinates(coords) 
    attempts_succeeded=np.all(table_data['ok']) 
    table_data['ok'][:]=attempts_succeeded 
    table.modify_coordinates(coords,table_data) 

这可能不是最有效的方法,但它应该工作。

+0

嘿,谢谢,这是有道理的,但我不确定它是否适合我。这是我的错,我忘了提及,日栏意味着一周,所以表是巨大的,但日子是一个循环,11122233344455666777111222333 ....所以我将需要测试行为,如果此代码后“第一周”。无论如何,你向我展示了一个可能的方式来做到这一点,我会努力工作,谢谢。 – codeKiller

+0

@ user2919052:好的,所以今天是工作日。你叫什么巨大?我会考虑在表格中分段读取(几十万到上百万行),处理内存中的数据并将其写回新文件。如果我是正确的,你只需要做一次这个操作。 –

+0

当我说巨大的时候,我用来“玩”和测试脚本的表格有150万行,但我相信,未来它可能会更大。 – codeKiller