我写了一个程序,它从我们的机器预订系统中获取杂乱的数据,清理它并吐出用户,他们使用的时间和机器名称。 我一直在处理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
它运行没有错误,但问题是它只返回所有代码的零。如果我添加一个用实际名称查询字典的行,它会拉出正确的值。有没有办法使用变量查询字典?
答案 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)