【问题标题】:Calculating sum o a row of values from csv file Python从csv文件Python计算一行值的总和
【发布时间】:2015-11-22 20:07:44
【问题描述】:

我正在尝试计算 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

感谢您的帮助!

【问题讨论】:

  • 请提供您的数据样本 ....

标签: python csv


【解决方案1】:

使用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})

【讨论】:

    【解决方案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))
    

    【讨论】:

    • 没有对值进行分组
    • @PadraicCunningham,你是什么意思分组值?
    • OP 使用 dict 映射第一行元素作为任何有效数字值之和的键。
    猜你喜欢
    • 2020-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-17
    • 1970-01-01
    • 1970-01-01
    • 2014-01-24
    • 1970-01-01
    相关资源
    最近更新 更多