簡體   English   中英

從CSV文件Python計算值的總和

[英]Calculating sum o a row of values from csv file Python

我正在嘗試從包含鍵的行的第一列中計算一個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

感謝您的幫助!

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

看一下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))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM