使用python使用csv文件进行数据累积

时间:2018-01-27 04:47:45

标签: python csv

这是一个示例csv文件;

out_gate,in_gate,n_con
/a_a,b,1
/a_a,b,3
/a_b,a,2
/a_b,c,4
/a_c,a,5
/a_c,b,5
/a_c,b,3
/a_c,a,4
/a_d,c,2
/a_d,c,3
/a_d,b,2

我试图逐个匹配每个数据并累积它,例如, / a_a-> b:4,/ a_b-> a:2,/ a_c-> d:0,/ a_d-> c:5这里是我的代码

import csv
from collections import defaultdict

d = defaultdict(lambda : defaultdict(int))

with open("C:/Users/user/test1.txt") as in_file:
    csv_reader = csv.reader(in_file)
    next(csv_reader)
    for row in csv_reader:
        if len(row) >= 3:
            x,y,count = row
        d[x][y] += int(count)

keys = sorted(d)
for x in keys:
    print(x, [d[x][y] for y in keys])

然后出现错误,说' x'没有定义。 (NameError:name' x'未定义,第12行)

我的最终目标是让它像这种形式(价值观不正确); 这样我就可以直接使用csv writer将它转换为excel文件。 如何更正我当前的代码?

    ,a,b,c,d
/a_a,0,1,1,1
/a_b,1,0,7,2
/a_c,1,6,0,3
/a_d,1,5,4,0

1 个答案:

答案 0 :(得分:2)

虽然您的代码可能存在一些风格问题,但当我粘贴您当前列出的版本时,字典构建部分对我来说很好。

打印部分不起作用。您正在尝试使用顶级字典的键访问嵌套字典。当我将print语句更改为:

keys = sorted(d)
for x in keys:
    child_keys = sorted(d[x])
    for y in child_keys:
        print(x, y, d[x][y])

剩下剩下的代码,我看到了预期的输出:

('/a_a', 'b', 4)
('/a_b', 'a', 2)
('/a_b', 'c', 4)
('/a_c', 'a', 9)
('/a_c', 'b', 8)
('/a_d', 'b', 2)
('/a_d', 'c', 5)