与@tdelaney的回答相反,我不建议您通过将第一列相加来限制代码;如果您下周需要处理第三列呢?通过构建您提供的代码,很容易正确地完成这项工作。分析几千个文本文件并不会减慢您的速度。在
csv.DictReader构造函数将自动将其输入的第一行视为头(除非使用fieldnames参数显式指定列名列表)。所以你的代码可以是这样的:import csv
import glob
averages = []
for fname in glob.glob(path):
with open(fname, "rb") as csvfile:
reader = csv.DictReader(csvfile)
values = [ float(row["agr"]) for row in reader ]
avg = sum(values) / len(values)
averages.append((fname, avg))
列表averages现在包含您想要的数字。这是将其写入另一个CSV文件的方法:
^{pr2}$
既然您在进口中包含了pandas,这里有一种方法可以对熊猫做同样的事情。不过,我建议暂时使用csv。pandas对象模型很复杂,很难让你的头脑清醒过来。在averages = []
for fname in glob.glob(path):
data = pd.DataFrame.from_csv(fname)
averages.append((fname, data["agr"].mean()))
df_out = pd.DataFrame.from_records(averages, columns=["File", "Average agr"])
df_out.to_csv("averages.csv", index=False)
如您所见,代码要短得多,因为文件i/o和计算可以用一条语句完成。在