我在使用阅读器时读过一个csv文件,需要获取每列的总数。我在stackexchange上跟了几个线程,得到了以下代码:
with open ("column_formatted.csv") as csvfile2:
csv_f2 = csv.reader(csvfile2, delimiter=',')
for row in csv_f2:
print row[1]
print sum(row[1])
第一个print语句的输出显示数据为:
43.0
60.0
10.0
但是印刷品和sum函数给出以下错误:
TypeError:+:'int'和'str'的不支持的操作数类型。
我尝试使用以下内容转换为整数:
print sum(int(row[1]))
但这次我收到了错误:
ValueError:int()的基数为10的无效文字:'43 .0'
我不知道如何处理这些信息,以便让我获得每列的总数。任何帮助都会非常棒, 感谢
答案 0 :(得分:2)
我对csv模块并不是很熟悉,但我认为你的问题是row[1]
确实是一个字符串。在转换为float
之前,您可以使用int
:
>>> a='1.0'
>>> int(a)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10: '1.0'
>>> float(a)
1.0
>>> int(float(a))
1
但是sum(int(float(row[1])))
将失败,因为'int'对象不可迭代。您可能希望将int初始化为0,并为每行添加row[1]
,或者将列表初始化为[],然后附加每个单元格,然后在此列表中使用sum。
>>> with open("f") as f:
... c = csv.reader(f, delimiter=',')
... some_var = 0
... some_list = []
... for r in c:
... some_var += int(float(r[1]))
... some_list.append(int(float(r[1])))
...
>>> some_var
6
>>> sum(some_list)
6