Read And Aggregate Data From Csv File
I have a data file with the following format: name,cost1,cost1,cost1,cost2,cost3,cost3, X,2,4,6,5,6,8, Y,0,3,6,5,4,6, . . .... Now, what I would like to do is to convert this to a
Solution 1:
import csv
types = [str, float, float, float, float, float, float]
with open('multientry.csv') as f:
data = csv.reader(f, delimiter=',')
headers = next(data)
dofd = {}
for r in data:
r = tuple(convert(value) for convert, value in zip(types, r))
dofd[r[0]] = {}
dofd[r[0]]['cost1'] = (r[1]+r[2]+r[3])/3.
dofd[r[0]]['cost2'] = r[4]
dofd[r[0]]['cost3'] = (r[5]+r[6])/2.
print dofd
Solution 2:
A more generic version based on @cphlewis's directions:
load_data = csv.reader(open( "multientry.csv", "r" ))
header = next(load_data)
header = filter(bool,header)
categories = header
categories.pop(0)
categories = set(categories)
dofd={}
for row in load_data:
row = filter(bool,tuple(value for value in row))
dofd[row[0]]={}
for item in categories:
val = [float(k) for k in [row[i+1] for i in [i for i, x in enumerate(header) if x == item]]]
dofd[row[0]][item] = sum(val)/float(len(val))
Post a Comment for "Read And Aggregate Data From Csv File"