0

2 つの csv ファイルの ID フィールドを日付と場所コードで照合しています。両方のファイルは次のようになります (もちろん ID は異なります)。

ID   code   date
543  452   '1/4/2009'
543  452   '1/8/2009'
543  452   '2/1/2009'
543  452   '2/14/2009'
543  452   '3/6/2009'
543  452   '3/9/2009'
874  210   '1/4/2009'
874  210   '1/9/2009'
874  210   '1/24/2009'
874  210   '2/7/2009'

これらをnumpy配列としてロードしてからループしていますが、ループ内で特定のタスクを実行できません。最初の csv (lb) のレコードと一致するすべてのレコードの 2 番目の csv (vms) からサブセット配列を作成する必要があります。ここに私が取り組んでいるコードがあります:

import numpy as np
from collections import defaultdict

lb = np.genfromtxt('file2009.csv',dtype = None, delimiter = ',', names = True)
vms = np.genfromtxt('2009final.csv',dtype = None, delimiter = ',', names = True)

id_list = list(set(lb['ID']))

matchList = defaultdict(list)

for e in id_list:
    log = lb[lb['ID']==e]
    vms_list = vms[ np.logical_and(vms['date']==log[0]['date'] , vms['code']==log[0]['code'] )] 
    vms_id_list = list(set(vms_list['ID']))
    for row in log:
        if len(vms_id_list) == 1:
            break
        else:
            vmsIDs = vms[vms['ID'] == vms_id_list[0]]
            vms_ids = str(vms_id_list)
            for every in vms:
                if str(every['ID']) in vms_ids:
                    vmsIDs = np.hstack([vmsIDs, every])
            vms_id_list = []
            vms_list = vmsIDs[ np.logical_and(vmsIDs['date']==row['date'] , vmsIDs['code']==row['code'] )]
            vms_id_list = list(set(vms_list['ID']))
    matchList[e].append(vms_id_list)

コードを実行してもエラーは発生し
vms_list = vms[ np.logical_and(vms['date']==log[0]['date'] , vms['code']==log[0]['code'] )]
ませんが、 vms_list が空であるため、行: が正しく実行されていないことは明らかです。これにより、後で行vmsIDs = vms[vms['ID'] == vms_id_list[0]]. リストが作成されているため、本当に混乱しています。基準を満たすレコードがたくさんあることはわかっていますが、リストは完全に空です。
コード行をループからコピーして独立して実行すると、問題なく動作するため、問題はループ内で実行することにあります。なぜこれが機能しないのかわかりません。言語をnumpy logical_andから次のように変更しようとしました:

for e in id_list:
    log = lb[lb['ID']==e]
    for each in vms:
        if each['date'] == log[0]['date'] and each['code'] == log[0]['code']:
            vms_id_list.append(each['ID'])

しかし、それは機能しません。リストは空です。このステップの要点は、lb の行の条件に一致する VM から ID のリストを取得することですが、それでも機能せず、リストは空です。私が見ていないある種のロックはありますか?私がやろうとしていることを行う別の方法はありますか?

4

1 に答える 1

0

コメント セクションで述べたように、何らかの理由でこのコードはリストを正しく保存していませんでしたが、リストを印刷するように求められたときにリストが保存され、スクリプトが正しく実行されました。完成したスクリプトは次のとおりです。

import numpy as np
from collections import defaultdict

lb = np.genfromtxt('file2009.csv',dtype = None, delimiter = ',', names = True)
vms = np.genfromtxt('2009final.csv',dtype = None, delimiter = ',', names = True)

id_list = list(set(lb['ID']))

matchList = defaultdict(list)

for e in id_list:
    log = lb[lb['ID']==e]
    vms_list = vms[ np.logical_and(vms['date']==log[0]['date'] , vms['code']==log[0]['code'] )]
    print vms_list 
    vms_id_list = list(set(vms_list['ID']))
    for row in log:
        if len(vms_id_list) == 1:
            break
        else:
            vmsIDs = vms[vms['ID'] == vms_id_list[0]]
            vms_ids = str(vms_id_list)
            for every in vms:
                if str(every['ID']) in vms_ids:
                    vmsIDs = np.hstack([vmsIDs, every])
            vms_id_list = []
            vms_list = vmsIDs[ np.logical_and(vmsIDs['date']==row['date'] , vmsIDs['code']==row['code'] )]
            vms_id_list = list(set(vms_list['ID']))
    matchList[e].append(vms_id_list)
于 2013-08-28T16:48:14.263 に答える