Python - CSV转置具有相同值的单元格/删除重复项但保留值

时间:2015-12-23 02:45:07

标签: python csv

我有CSV文件:

id1,    id2,    value
2.1,    53.2,   0
2.1,    53.2,   1
2.1,    53.2,   3
2.1,    53.2,   8
3.3,    52.5,   0
3.3,    52.5,   6
3.3,    52.5,   9
3.3,    52.5,   12

我想做的是:

  1. 连接id1 + id2以形成唯一键 - ' 2.1 53.2'
  2. 我想将这些键的所有值添加到该键
  3. 产生的CSV

    id        val1 val2 val3 val4
    2.1 53.2, 0,   1,   3,   8
    3.3 52.5, 0,   6,   9,   12
    

    编码6小时后我决定问...我使用了dicReader csvReader等...我尝试将它加载到列表中,使用集合但没有任何作用......

2 个答案:

答案 0 :(得分:0)

我建议创建一个defaultdict来存储每个条目list的值,其中包含每个匹配行的value单元格。通过查找list的{​​{1}} s的最大长度来创建标题行,然后迭代字典并将每个条目写为一行:

value

答案 1 :(得分:0)

import csv
reader = csv.reader(open('in.csv'), delimiter=',', quoting=csv.QUOTE_NONE)
header = next(reader, None) 
data = [(k1.strip()+' '+k2.strip(),v.strip()) for k1,k2,v in reader]
data = dict(((k1, [v for k2,v in data if k1 == k2]) for k1 in set(zip(*data)[0])))
with open('out.csv', 'w') as outfile:
  writer = csv.writer(outfile)
  writer.writerow(['id', 'val1', 'val2', 'val3', 'val4'])
  for key in sorted(data.keys()):
    writer.writerow([key] + data[key])