以csv对每列求和

2024-05-14 04:08:01 发布

您现在位置:Python中文网/ 问答频道 /正文

给定一个csv文件

A,0,0,1,0
B,0,0,1,0
C,0,0,1,0
D,0,0,1,0
E,0,0,1,0
F,0,0,0,1

我想计算每列的总数。有没有一种比以下方法更具吸引力或更有效的方法来做到这一点:

import csv

totals = [0]*4

for row in csv.reader(csvfile):
    counts = [ int(x) for x in row[-4:] ]
    totals = [ sum(x) for x in zip(counts, totals) ]
print(totals)

Tags: 文件csvcsvfile方法inimportforreader
3条回答

您可以使用numpy^{}读取文件,然后对索引列和数组进行切片^{}

import numpy as np

my_data = np.genfromtxt(csvfile, delimiter=',')
print(my_data[:,1:].sum(axis=0))

给出:

[0. 0. 5. 1.]

以下是一种无需外部LIB即可完成工作的综合方法:

matrix = [[int(i) for i in row[-4:]] for row in csv.reader(csvfile)]

totals = [sum(array[i] for array in matrix) for i in range(4)]

事先转置csv文件,跳过现在的标题列,只计算每行的总和

cr = zip(*csv.reader(csvfile))
next(cr)

result = [sum(map(int,x)) for x in cr]
print(result)

[0, 0, 5, 1]

不过,在扩展zip的参数时要小心,因为它会将整个文件加载到内存中

相关问题 更多 >