我是编程新手。 请帮助我完成以下任务。 我有一个未知行的 csv 数据。但每一行具有与以下相同数量的元素:
Right FRWindow openStart 16.9 11.2 18.2
Right FRWindow openStart 16.5 11.7 17.5
Right FRWindow openStart 16.9 11.7 18
Right FRWindow openEnd 7.61 1.76 8.37
Right FRWindow openEnd 7.3 1.74 8.6
Right FRWindow openEnd 7.64 2.45 8.43
Right FRWindow closeStart 13 8.2 14.4
Right FRWindow closeStart 12.9 7.55 14.5
我想计算具有相同字符串FRWindow openStart
和FRWindow openEnd
等的那些行的平均值。
谢谢
您可以使用 python 中的 csv 模块从 csv 文件中获取数据,如下所示:
import csv
start_values = {'col3':[], 'col4':[], 'col5':[]}
end_values = {'col3':[], 'col4':[], 'col5':[]}
with open('example.csv', newline='') as csvfile:
reader = csv.DictReader(csvfile)
for row in reader:
if row['col2'] == 'FRWindow openStart':
start_values['col3'].append(float(row['col3']))
start_values['col4'].append(float(row['col4']))
start_values['col5'].append(float(row['col5']))
if row['col2'] == 'FRWindow openEnd':
end_values['col3'].append(float(row['col3']))
end_values['col4'].append(float(row['col4']))
end_values['col5'].append(float(row['col5']))
csvfile.close()
print('Start average for col3: {:.2f}, col4: {:.2f}, col5: {:.2f}'.format(sum(start_values['col3'])/len(start_values['col3']), sum(start_values['col4'])/len(start_values['col4']), sum(start_values['col5'])/len(start_values['col5'])))
print('End average for col3: {:.2f}, col4: {:.2f}, col5: {:.2f}'.format(sum(end_values['col3'])/len(end_values['col3']), sum(end_values['col4'])/len(end_values['col4']), sum(end_values['col5'])/len(end_values['col5'])))
使用此逗号分隔的示例.csv您的数据,
col1,col2,col3,col4,col5
Right,FRWindow openStart,16.9,11.2,18.2
Right,FRWindow openStart,16.5,11.7,17.5
Right,FRWindow openStart,16.9,11.7,18
Right,FRWindow openEnd,7.61,1.76,8.37
Right,FRWindow openEnd,7.3,1.74,8.6
Right,FRWindow openEnd,7.64,2.45,8.43
Right,FRWindow closeStart,13,8.2,14.4
Right,FRWindow closeStart,12.9,7.55,14.5
该程序将每一行读入字典,以便于访问,如您在 ifs 中查找开始和结束 (if row['col2'] == 'FRWindow openStart':
(。然后,它会用各自的值填充start_values
和end_values
词典。最后,这些词典将如下所示:
{'col3': [16.9, 16.5, 16.9, 13.0, 12.9], 'col4': [11.2, 11.7, 11.7, 8.2, 7.55], 'col5': [18.2, 17.5, 18.0, 14.4, 14.5]}
上面的一个是start_values
."开始"行上的每一列数字都整齐地打包到一个列表中。然后你所要做的就是print(sum(list)/len(list))
,然后使用 String.format 将你的平均值整齐地格式化为 2 位小数。
您可以在官方文档中了解有关使用 CSV 文件的更多信息。这是格式化字符串的便捷指南!