Python сохранение значений данных в CSV - PullRequest
0 голосов
/ 21 ноября 2018

Теперь эта программа считывает данные из CSV, суммирует значения за день и вычисляет кумулятивные значения.В следующей части я хочу сохранить данные в новый CSV-файл.

import csv
from collections import defaultdict, OrderedDict


def convert(data):
    try:
        return int(data)
    except ValueError:
        return 0


with open('Montdata1.csv', 'r') as file1:
        read_file = csv.reader(file1, delimiter=';')
        delheader = next(read_file)
        data = defaultdict(int)
        for line in read_file:
            valuedata = max(0, sum([convert(i) for i in line[1:5]]))
            data[line[0].split()[0]] += valuedata

        for key in OrderedDict(sorted(data.items())):
            print('{} {}'.format(key, data[key]))
        print("")
        previous_values = []
        for key, value in OrderedDict(sorted(data.items())).items():
            print('{} {}'.format(key, value + sum(previous_values)))
            previous_values.append(value)

Должно быть, что в столбце есть дата, а во второй - значения.Так что это будет примерно так: Пример изображения

Я пробовал следующий код, но он ничего не делает:

with open('Datasave.csv', 'w', newline='') as csvfile:
    spamreader = csv.reader(csvfile, delimeter= ' ')
    for row in spamreader:
        print(', '.join(row))

Надеюсь на помощь
Файл данных в формате csv: https://files.fm/u/2vjppmgv
Файл данных в pastebin https://pastebin.com/Tw4aYdPc

1 Ответ

0 голосов
/ 21 ноября 2018

Если вы просто хотите использовать свой оригинальный код и записать в CSV-файл, вы можете увидеть, как я это сделал ниже:

with open('Datasave.csv', 'w') as df:
    writer = csv.writer(df, delimiter=';', lineterminator='\n')
    for item in data:
        writer.writerow([item] + [data[item]])

С пандами:

#!/bin/python

import pandas as pd

df = pd.read_csv('data.csv', sep=';')

df['Sum'] = df[df.columns[2:]].sum(axis=1)
new_df = df.groupby('Time').sum()

new_df['Sum'].to_frame().to_csv('new_data.csv', sep=';')

Вывод:

Time;Sum
1.1.2016;351087.0
2.1.2016;-2453.0
3.1.2016;0.0

Со стандартными библиотеками:

import csv

dates={}

with open('data.csv', 'r') as df:
    df.readline()
    f = csv.reader(df, delimiter=';')
    for line in f:
        if line[0] not in dates:
            dates[line[0]] = sum(map(int, line[2:]))
        else:
            dates[line[0]] += sum(map(int, line[2:]))

with open('new_data.csv', 'w') as df:
    writer = csv.writer(df, delimiter=';', lineterminator='\n')
    for date in dates:
        writer.writerow([date] + [dates[date]])

Вывод:

Time;Sum
1.1.2016;351087.0
2.1.2016;-2453.0
3.1.2016;0.0
...