Python - 查找csv文件中每列的平均值,不包括标题和时间

时间:2016-02-12 17:33:14

标签: python csv

我正在阅读csv文件,如下所示:

with open('data.csv', 'rb') as f:
    reader = csv.reader(f)
    data_list = list(reader)

此处data_list是csv文件中每行的列表。因此data_list[0]是csv文件中的第一行(即标题),data_list[1]以后是包含csv文件中数据的实际行,data_line[1:][1]是时间。

所以基本上

data_list=
[['','Header1','Header2','Header3'],
['12:02:11', '2.3', '6.2', '11.8'],
['12:05:25', '1.5', '7.5', '13.2'],
['12:10:48', '4.1', '6.8', '12.6'],
['12:13:17', '1.6', '7.1', '12.1']]

我想找到每列的平均值,但不包括标题和时间作为计算的一部分,但保留输出的标题,只取一个小数位。总的来说,我想生产这样的东西:

average_data_list=
[['','Header1','Header2','Header3'],
['', 2.3', '6.9', '12.4']]

我一直在使用Python - Calculate average for every column in a csv file作为指南,但我的代码不断抛出错误,因为我无法正确地跳过标题和时间。

非常感谢任何帮助

4 个答案:

答案 0 :(得分:3)

以下内容应该有效:

import csv

with open('data.csv', 'rb') as f:
    reader = csv.reader(f)
    header = next(reader)
    data_list = list(reader)
    rows = [''] + ['{:.1f}'.format(sum(float(x) for x in y) / len(data_list)) for y in zip(*data_list)[1:]]
    average_data_list = [header] + [rows]

    print average_data_list

这会显示:

[['', 'Header1', 'Header2', 'Header3'], ['', '2.4', '6.9', '12.4']]

这里的技巧是先读取标题行,这样就不会妨碍它。 zip(*data_list)用于将您的行列表转换为列列表,以便轻松计算平均值。

答案 1 :(得分:1)

您可以尝试:

for i, row in enumerate(data_list):
    if i == 0:
         continue

    for j, value in enumerate(row):
        average_data_list[j] += value

quantity = len(data_list) - 1
for i, sum in enumerate(average_data_list):
    average_data_list[i] = sum / quantity

首先,您首先将所有值汇总到数组中;其次,你迭代结果数组计算它的平均值。

另一种选择是在每一步创建一个数量和增量的数组,如果你想忽略 nulls

答案 2 :(得分:0)

这个怎么样? a,b和c汇总各列的总和。然后除以行数减一(忽略标题行)并仅打印一个小数。

a,b,c = 0,0,0
for i, row in enumerate(data_list):
    if i != 0:
        a += float(row[1])
        b += float(row[2])
        c += float(row[3])

num_vals = len(data_list) - 1 #because of the header
a /= num_vals
b /= num_vals
c /= num_vals
print "{0:.1f} , {1:.1f}, {2:.1f}".format(a,b,c)

答案 3 :(得分:0)

The problem is fairly easy to solve using the http and csv modules provided in Python's standard library. The following example loads the data from the CSV file using the statistics class while simultaneously pivoting the data using the column names. Averaging the data in the columns is accomplished with the DictReader function while data conversion is handled via mean and map.

float