【发布时间】:2012-03-31 05:13:07
【问题描述】:
您好,我是 Python 的新用户,但在执行我认为相当基本的任务时遇到了问题。
我有几个 (>50) 个包含每日积雪深度数据的 csv 文件。我想遍历 csv 文件并计算雪深的每月平均值。数据示例:
Date,SD
1/1/2000,36
1/2/2000,36
1/3/2000,38
1/4/2000,40
2/1/2000,48
2/2/2000,48
换句话说,我想计算每月平均积雪深度并将输出写入一个新的 csv 文件。我能够为我的数据修改一个不同的代码示例,但是我收到了在我的字典中使用 Date 作为键值的键错误。
有什么建议吗?
到目前为止的代码:
from __future__ import division
import csv
from collections import defaultdict
def default_factory():
return [0, None, None, 0]
reader = csv.DictReader(open(r'C:\SandBox\VALIDATION\TestTable.csv'))
dates = defaultdict(default_factory)
for row in reader:
sd = int(row["SD"])
dates[row["Dates"]][0] += sd
max = dates[row["Dates"]][1]
dates[row["Dates"]][1] = amount if max is None else amount if amount > max else max
min = dates[row["Date"]][2]
dates[row["Dates"]][2] = amount if min is None else amount if amount < min else min
dates[row["Dates"]][3] += 1
for date in dates:
dates[date][3] = dates[date][0]/dates[date][3]
writer = csv.writer(open(r'C:\SandBox\VALIDATION\TestAvg.csv', 'w', newline = ''))
writer.writerow(["Date", "SD", "max", "min", "mean"])
writer.writerows([date] + dates[date] for date in dates)
编辑:澄清一下,我正在尝试实现每月平均值,即 1 月平均值、2 月平均值等...而不是计算单个日期的平均值。
【问题讨论】:
-
你能发布整个堆栈跟踪/错误吗?
-
如果你计算的是平均值而不是中值,你为什么要关心最小值和最大值?
-
正如 WolframH 所说,您的 csv 的第一行是“Date,Snowdepth”,但您的代码正在寻找“Dates,SD”
-
jgritty,这只是我用作参考的一些代码的遗物。它是否在输出中并不重要。
-
对于 jgritty:Traceback(最近一次调用最后一次):文件“C:\SandBox\Scripting\snotel.py”,第 17 行,在
dates[row["Dates"]][ 0] += sd KeyError: ('Dates',)
标签: python