2016-04-23 342 views
-1

我在csv中有两列:一列显示颜色,其他列显示颜色的数量。在csv中删除重复项并在python中添加列值csv

color | count 
red | 2 
red | 5 
green | 7 
blue | 9 
green | 3 
orange | 5 

我想删除第一列中的重复项,但总结了颜色的相应值。如何使用python做到这一点?我想在csv输出。

总产值有望

color | count 
red | 7 
green | 10 
blue | 9 
orange | 5 

这是我的代码:

import csv reader=csv.reader(open('cu.csv', 'r'), delimiter=',') 
writer=csv.writer(open('cu-clean.csv', 'w'), delimiter=',') 
lastnames = set() 
for row in reader: if row[1] not in lastnames: writer.writerow(row) 
lastnames.add(row[1])` 

谁能帮助我?

+0

@ Mr.Hyde 我试图做这样的事情。这不是我想要的。我是一名Python初学者,并尝试过这样做。 (open('cu.csv','r'),delimiter =',') writer = csv.writer(open('cu-clean.csv','w '),分隔符=',') lastnames =集() 用于读取行: 如果行[1]不是在lastnames: writer.writerow(行) lastnames.add(行[1])' – csvb

+0

抱歉无法通过正确的代码块修复 – csvb

回答

0
import csv 

with open('file.csv', 'rb') as f: 
    reader = csv.reader(f) 
    colors = {} 

    index = 0 
    for row in reader: 
     if index == 0: 
      header = row 
     else: 
      color = row[0] 
      count = row[1] 

      if color in colors: 
       colors[color] += int(count) 
      else: 
       colors[color] = int(count) 
     index += 1 

with open('out.csv', 'w') as csvfile: 
    writer = csv.DictWriter(csvfile, fieldnames=header, delimiter=',', lineterminator='\n') 
    writer.writeheader() 
    for k, v in colors.iteritems(): 
     writer.writerow({header[0]: k, header[1]: v}) 

这是为所有颜色和它们出现的次数保存字典,然后将字典写入文件。 您可以更改分隔符,以任何你想要的(好像你用“|”)

(Python的2.7测试)

+0

是的,谢谢。这工作。但是,你能否解释颜色对应的值的总和在哪里? – csvb

+0

如果颜色为: colors [color] + = int(count) else: colors [color] = int(count) 这将检查当前颜色是否已经存在于字典中。如果不是,那么它将首次以相应的值输入它。如果它已经在里面,那么它会将新值与之前的值相加。 – lazary

+0

是的。谢谢。它的工作。 – csvb