在Python 3.6.2中计算csv文件的总和

时间:2017-09-20 16:47:39

标签: python

我正在使用Python 3.6.2并且有一个如下所示的csv文件:

STATE,RATE,DEATHS
IA,4.2,166
NH,4.2,52
MA,4.3,309
CA,4.4,"2,169"
CO,4.6,309
ID,4.6,106
NY,4.6,"1,087"
VT,4.6,27
NJ,4.7,487
WA,4.9,432

我正在尝试计算“RATE”列的总和。但是,使用我当前的代码,我不断收到错误:“TypeError:'float'对象不可迭代”。我是Python的新手,我不确定我做错了什么。

import csv
with open('infant_mortality.csv', 'r') as f:
  next(f) #skips the first row
  for row in csv.reader(f):
    total = sum(float(row[1]))
  print('The total is {}'.format(total))

感谢您的帮助!

3 个答案:

答案 0 :(得分:2)

怎么样:

import pandas as pd

df = pd.read_csv('infant_mortality.csv')

print('The total is {}'.format(df['RATE'].sum()))

答案 1 :(得分:0)

您使用的sum()需要像列表一样的迭代,只需在total中添加一个起始值,然后将所有值加总为total += value

import csv
with open('infant_mortality.csv', 'r') as f:
  next(f) #skips the first row
  total = 0
  for row in csv.reader(f):
    total += float(row[1])
  print('The total is {}'.format(total))

答案 2 :(得分:0)

sum()期望一个可迭代对象,但是当你写 sum(float(row [1])) 时,row [1]是一个单独的值,而不是像列表一样迭代(在你的情况下是'row'列表)

来自python docs

  

sum(iterable [,start])

     

总结开始和可迭代的项目   从左到右并返回总数。开始默认为0   iterable的项目通常是数字,而起始值则不是   允许是一个字符串。

使用sum()

的示例
list_number = [2,3,5]
print sum(list_number)
10

也许下面的代码可以帮助你。

import csv
total = 0
with open('infant_mortality.csv', 'r') as f:
  next(f) #skips the first row
  for row in csv.reader(f):
    total += float(row[1])
  print('The total is {}'.format(total))