我正在尝试计算 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)
如果该值可以转换为 float ,则键的值将递增,否则我们会捕获错误并继续。
输入:
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})
