2014-03-12 135 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