如何将CSV中的多行组合成一行

时间:2015-07-05 10:37:16

标签: python csv

我已经获得了一个大型CSV文件,我需要将其删除以用于机器学习。我设法找到了将文件拆分为我需要的2行的方法 - 但我遇到了问题。

我基本上有这样的文件结构。

 "David", "Red"
 "David", "Ford"
 "David", "Blue"
 "David", "Aspergers"
 "Steve", "Red"
 "Steve", "Vauxhall"

我要求数据看起来更像......

"David, "Red", "Ford", "Blue", "Aspergers"
"Steve", "Red", "Vaxhaull"

我目前要将其删除CSV文件

import csv

cr = csv.reader(open("traits.csv","rb"), delimiter=',', lineterminator='\n')
cr.next() #skipping header line, no point in removing it as I need to standardise data manipuation.


# Print out the id of species and trait values
print 'Stripping input'
vals = [(row[1], row[4]) for row in cr]
print str(vals) + '\n'

with open("output.csv", "wb") as f:
    writer = csv.writer(f)
    writer.writerows(vals)
    print 'Sucessfully written to file output.csv'


#for row in cr:
#print row

2 个答案:

答案 0 :(得分:5)

使用字典将名称作为键和列表中的其他属性存储为值:

print my_dict
{'Steve': ['Red', 'Vauxhall'], 'David': ['Red', 'Ford', 'Blue', 'Aspergers']}

结果:

with open("output.csv", "wb") as f:
    writer = csv.writer(f,delimiter=',')
    for i,j in my_dict.iteritems():
        writer.writerow([i]+j)

并写入新文件:

{{1}}
  

setdefault(key [,default])

     

如果键在词典中,则返回其值。如果不是,请插入值为default的值并返回default。默认默认为无。

答案 1 :(得分:0)

使用public enum volstextfield { vol1HH1, vol1HH2 } public void createGUI() { for (volstextfield direction : EnumSet.allOf(volstextfield.class)) { System.out.println(direction); direction = new JTextField(5); //i get an error here incompatible types: JTextField cannot be converted to volstextfield } } ,它正是您需要的,这是一个示例:

defaultdict

(除了列表,您可能需要使用set,在这种情况下,您可以调用.add而不是.append。)

您可以使用>>> from collections import defaultdict >>> md = defaultdict(list) >>> md[1].append('a') >>> md[1].append('b') >>> md[2].append('c') >>> md[1] ['a', 'b'] >>> md[2] ['c'] 轻松访问数据。