Python 通过选择行更新pytable

Python 通过选择行更新pytable,python,pytables,Python,Pytables,再一次,我需要有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

再一次,我需要有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

其主要思想是,如果一天中的任何尝试失败(=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。

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

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)

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

嘿,谢谢,这很有意义,但我不确定它是否适合我。这是我的错,我忘了提到,day列表示周,因此表很大,但天是一种循环,1112223334445666777111222333…因此如果此代码在“第一周”之后,我需要测试行为。不管怎样,你给我展示了一种可能的方法,我会努力的,谢谢。@user2919052:好的,所以这一天是工作日。你称之为大吗?我会考虑在表中逐个阅读(数十万到一百万行),处理内存中的数据并将其写入新文件。如果我是正确的,你只需要做一次这个操作。当我说巨大时,我用来“播放”和测试脚本的表有150万行,但我相信,在未来它可能会更大。100万行,有3个条目(int16,int16,bool)对应于大约5 MB,因此很容易放入内存…在numpy阵列上操作更容易、更快,然后您可以将其转储到您喜欢的任何类型的文件中。