I have CSV example like this
ID,TASK1,TASK2,QUIZ1,QUIZ2
11061,50,75,50,78
11062,70,80,60,50
11063,60,75,77,79
11064,52,85,50,80
11065,70,85,50,80
how do i get the Max, Min and Avg on specific Column?
i want the output like this, if i want to get Avg on TASK1
output:
Average of TASK1 is 60.4
or
ID,TASK1,TASK2,QUIZ1,QUIZ2
11061,50,75,50,78
11062,70,80,60,50
11063,60,75,77,79
11064,52,85,50,80
11065,70,85,50,80
AVG,60.4, , , ,
so Far my Code like this helped by OlvinRoght
with open('file.csv',"r") as f:next(f) # skip first linerows = []for line in f:row = []for column in line.split(",")[1:]: # skip first columnrow.append(int(column)) # convert string to introws.append(row)max_row = ['Max'] min_row = ['Min']for column in zip(*rows):max_row.append(str(max(list(zip(*rows))[0])))min_row.append(str(min(list(zip(*rows))[0])))print(','.join(max_row))print(','.join(min_row))
We can achieve achieve this my maintaining aggregated metrics as a list.
skip_columns = ["ID"]
num_lines = 0min_stat = [None]
max_stat = [None]
sum_stat = [0]with open("file.csv", "r") as f:for line in f:if num_lines == 0:columns = [col.strip() for col in line.split(",")]number_of_colums = len(columns)min_stat = min_stat * number_of_columsmax_stat = max_stat * number_of_columssum_stat = sum_stat * number_of_columselse: values = [int(col_value.strip()) for col_value in line.split(",")]for idx, v in enumerate(values):min_stat[idx] = min(v if min_stat[idx] is None else min_stat[idx], v)max_stat[idx] = max(v if max_stat[idx] is None else max_stat[idx], v)sum_stat[idx] += vnum_lines += 1
for idx, col in enumerate(columns):if col in skip_columns:continuestat = stats[col]print(f"Minimum of {col} is {min_stat[idx]}.")print(f"Maximum of {col} is {max_stat[idx]}.")print(f"Average of {col} is {sum_stat[idx] / (num_lines - 1)}.")