Как добавить строки при чтении CSV-файла в python - PullRequest
0 голосов
/ 01 апреля 2020

Вот мой CSV-файл:

enter image description here

Я хочу добавить те же значения даты в кортежи.

Мне нужен такой ответ:

{
    {'26-03-2020', marks:2923,couse1:2297}, 
    {'27-03-2020', marks:2212,course1:1783}
}

Есть ли какое-нибудь простое решение для этого. Или я могу сделать это, используя только один l oop? заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 01 апреля 2020

Вы могли бы сделать это pandas довольно легко

import pandas as pd
# read in the csv
# group by the date column, and sum the other columns
# reset index to get the dates as a series
# convert dataframe to dictionary
out = pd.read_csv('file.csv').groupby('date').sum().reset_index().to_dict('records')

#Out I
[{'date': '26-03-2020', 'marks': 2796, 'course1': 2157},
 {'date': '27-03-2020', 'marks': 2212, 'course1': 1783}]

# Out II
# if you insist on having it as a dict of dicts
out = {k['date']: {'marks': k['marks'], 'course1': k['course1']} for k in out }

{
    '26-03-2020': {'marks': 2796, 'course1': 2157},
     '27-03-2020': {'marks': 2212, 'course1': 1783}
}

Дальнейшее объяснение для ясности

Невозможно иметь словарь так, как вы просите. Мой пример выше показывает, что дата является ключом к новому словарю. В вашем примере вы используете , вместо :, что невозможно.

0 голосов
/ 01 апреля 2020

Попробуйте что-то вроде следующего

import csv, io

data = '''\
date,marks,course1
26-03-2020,1,10
26-03-2020,2,20
26-03-2020,4,40
27-03-2020,100,2
27-03-2020,200,4
27-03-2020,400,8
'''

out = {}
f = io.StringIO(data)
reader = csv.DictReader(f)
for r in reader:
    k = r['date']
    m = int(r['marks'])
    c = int(r['course1'])
    if k in out:
        out[k]['marks'] += m
        out[k]['course1'] += c
    else:
        out[k] = {'marks': m, 'course1': c}

print(out)

...