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 のリストを取得することですが、それでも機能せず、リストは空です。私が見ていないある種のロックはありますか?私がやろうとしていることを行う別の方法はありますか?