使用从csv文件中获取的变量搜索字典

时间:2014-05-20 12:33:30

标签: python csv dictionary

我写了一个程序,它从我们的机器预订系统中获取杂乱的数据,清理它并吐出用户,他们使用的时间和机器名称。 我一直在处理Pandas中的所有CSV文件。

输出文件包含三列 - 资源名称,用户名和小时。

我还构建了一个包含用户名(作为密钥)和存储代码的字典文件(也就是csv)。

我想获取输出文件,并使用字典添加包含Stores代码的第四列。这是代码的相关部分

import csv
import pandas as pd

#open output file, add headers
process = pd.read_csv('C:\Users\someone\Desktop\pythonwork\data\processed2.csv',header=None)
process.columns = [ 'Resource', 'Name', 'Hours']

#read code list
with open('C:\Users\someone\Desktop\pythonwork\data\codes.csv') as f:
    codes = dict(filter(None, csv.reader(f)))
    for i in process.index:
        nam=str(process['Name'])
        grantcode=codes.get(nam, 0)
        print grantcode

它运行没有错误,但问题是它只返回所有代码的零。如果我添加一个用实际名称查询字典的行,它会拉出正确的值。有没有办法使用变量查询字典?

1 个答案:

答案 0 :(得分:1)

您的主要问题在以下一行:

nam=str(process['Name'])

这实际上返回整个Series或列。所以它不作为关键存在。我的建议是构建列,然后将其插入数据框。

grant_codes = [codes.get(name, 0) for name in process['Name']]
process['Code'] = grant_codes

如果您想继续对索引进行迭代,您必须执行以下操作,但我建议如上:

for i in process.index:
    nam = process.at[i, 'Name']
    grant_code = codes.get(nam, 0)