计算来自csv文件Python的一行值的总和

时间:2015-11-22 20:07:44

标签: python csv

我正在尝试使用包含键的行的第一列来计算csv文件中所有值的总和。所有这些数据都将放在Python的字典中。

到目前为止,我已经提出了这个代码。唯一的问题是并非所有值都是整数,有些是空白的并且包含字符串。我需要更新代码以忽略这些。

显而易见的改进是计算文件的列数而不是假设它有多达三列数据,我不太确定如何实现这一点!

import csv  
d = {}
with open(filename) as csvfile:
    rdr = csv.reader(csvfile)
    if header == True:
        next(rdr, None)
    for row in rdr:
        d[row[0]] = int(row[1]) + int(row[2]) + int(row[3])
return d

我感谢任何帮助!

2 个答案:

答案 0 :(得分:3)

使用try/except将每个元素投射到float

import csv
from collections import defaultdict
with open(filename) as csvfile:
    next(csvfile)
    rdr = csv.reader(csvfile)
    d = defaultdict(float)
    for row in rdr:
        for v in row[1:]:
            try:
                d[row[0]] += float(v)
            except ValueError:
                pass
    print(d)

如果值可以转换为浮动,则键的值将递增,否则我们会捕获错误并继续。

输入:

a,b,c,d
1,"foo",3,""
2,5,"fuzz",12.12
3,"","bar",33.3

输出:

defaultdict(<class 'float'>, {'1': 3.0, '2': 17.119999999999997, '3': 33.3})

答案 1 :(得分:2)

看看Numpy - 它让生活变得更轻松

from numpy import genfromtxt
import numpy as np

my_data = genfromtxt('my_file.csv', delimiter=',', dtype=str)

d = {}

for i in my_data:
    subset = i[1:] # create a subset to from index 1 to end
    subset[subset == ''] = '0' # change all empty spaces to zero
    d[i[0]] = np.sum(subset.astype(float))