在Python中总结一个csv列;整数和字符串问题

时间:2015-06-08 14:39:16

标签: python-2.7 csv

我在使用阅读器时读过一个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'

我不知道如何处理这些信息,以便让我获得每列的总数。任何帮助都会非常棒, 感谢

1 个答案:

答案 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