python - 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
解决方案
如果您只想使用原始代码并写入 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
推荐阅读
- r - 有没有办法按在 R 中互换的两个变量进行分组
- list - Haskell:通过元组从元组列表中删除元素
- javascript - 使用正则表达式我想保留一些特殊字符但删除另一个(垂直条)
- mysql - 从表 1 中选择所有,其中某些条件不在表 2 中
- sql - SQL QUERY : 查找每年售出的副本 > 10000
- reactjs - 在反应应用程序中以无头模式运行时 Puppeteer 测试失败
- java - setZone 方法有问题吗?
- r - 将多个 CSV 合并为一个数据框
- c++ - 调用接收到的事件实例时使用 QCoreApplication::postEvent() 报告线程清理程序
- scala - 动态类型的模式匹配作为函数的参数