[英]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.