无法在python循环中执行任务

无法在python循环中执行任务,python,loops,csv,python-2.7,numpy,Python,Loops,Csv,Python 2.7,Numpy,我通过日期和位置代码匹配两个csv文件中的ID字段,两个文件的外观如下(当然,ID不同): 我将这些作为numpy数组加载,然后循环,但是我无法在循环中执行特定任务。我需要从第二个csv(VM)中创建一个子集数组,该数组包含与第一个csv(lb)中的记录匹配的所有记录。以下是我正在使用的代码: import numpy as np from collections import defaultdict lb = np.genfromtxt('file2009.csv',dtype = None

我通过日期和位置代码匹配两个csv文件中的ID字段,两个文件的外观如下(当然,ID不同):

我将这些作为numpy数组加载,然后循环,但是我无法在循环中执行特定任务。我需要从第二个csv(VM)中创建一个子集数组,该数组包含与第一个csv(lb)中的记录匹配的所有记录。以下是我正在使用的代码:

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\u list=vms[np.logical\u和(vms['date']==log[0]['date'],vms['code']==log[0]['code'])

未正确运行,因为vms_列表为空,这将在稍后的行中生成错误
vmsIDs=vms[vms['ID']==vms_ID_列表[0]
。 我真的很困惑,因为列表是创建的,它完全是空的,即使我知道有许多记录符合条件。
如果我只是简单地将代码行从循环中复制出来并独立运行它,那么它工作得很好,所以问题在于它在循环中执行。我不知道为什么这不起作用,我甚至尝试将语言从numpy逻辑单元更改为:

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'])

但它不起作用,列表是空的。这一步的整个要点是从VM中获取一个ID列表,该列表符合lb中某行的标准。但它仍然不起作用,列表为空。有什么锁我没看见吗?是否有其他方法来执行我尝试执行的操作?

如注释部分所述,无论出于何种原因,此代码只是没有正确存储我的列表,但当提示打印列表时,它被存储并且脚本运行正常。以下是完成的脚本:

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)

我建议在对某些变量的状态有一定期望的地方添加一些调试输出。
log
你会怎么想?哇。我不知道这一次为什么奏效,因为我发誓我在发帖前试过解决这个问题。只需在代码行后添加“print vms_list”,脚本就可以正常工作。我想不管是什么原因,vms_列表没有完全存储或类似的东西。@Almatom您可以将您的发现作为答案发布。。。
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)