首页 > 解决方案 > Python将数据值保存到csv

问题描述

现在这个程序从 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

标签: pythonpython-3.xcsvsave

解决方案


如果您只想使用原始代码并写入 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

推荐阅读