我应该将数据组织在哪种数据结构中?

时间:2017-04-09 19:13:06

标签: python

初学者程序员在这里。我给了一个csv文件。一列包含日期,另一列包含一个字符串,该字符串表示“缺席”#39;或者'呈现'。 (日期也是一个字符串)

我想要实现的目标是对出现在特定日期的孩子数量的百分比进行分组。

因此,作为最终结果的例子,我可能会有一个列表列表,其中包含日期和参与的学生百分比

Attendance = [[08/22/2016, 89.013],[08/26/2016, 84.33]]

唯一的问题是我不知道如何达到这一点。

有人能告诉我如何从A点到B点吗?

编辑:对于这个例子,让我们说

file_o = open(csvFile, 'r')
csvF = csv.reader(file_o)
for line in csvF:
    line[0] # contains date
    line[1] # contains 'Absent' or 'Present

1 个答案:

答案 0 :(得分:1)

dict似乎是最简单的方法。使用它来记录每个日期的当前/缺席值列表,然后将它们相加。由于您只想要某些日期,我已使用这些日期初始化跟踪字典,而忽略其他日期。

(注意:更新为工作示例)

import csv

# write a test file
open('mytest.csv', 'w').write("""08/22/2016,Present,Fiona
08/22/2016,Absent,Ralph
08/23/2016,Present,Fiona
08/23/2016,Absent,Ralph
08/24/2016,Present,Fiona
08/24/2016,Absent,Ralph
08/25/2016,Present,Fiona
08/25/2016,Absent,Ralph



""")

# initialize tracker with wanted dates.
wanted_dates = ['08/22/2016', '08/25/2016', '08/30/2016']
tracker = {wanted:[] for wanted in wanted_dates}

with open('mytest.csv', newline='') as fp:
    reader = csv.reader(fp)
    for row in reader:
        if row:
            date = row[0]
            # only add wanted dates
            if date in tracker:
                present = row[1].lower()
                tracker[date].append(present == 'present')

# create final report. make a copy of tracker's values because we
# will change tracker during enumeration.
for date, present_list in tracker.items():
    if not present_list:
        # no data, so show 0
        present_list = [0]
    tracker[date] = float(sum(present_list))/len(present_list) * 100

for date, percent in sorted(tracker.items()):
    print('{} {:2.2f}'.format(date, percent))