import csv
csvfile = open(r"C:\Users\Administrator\Downloads\canberra_2011_2012.csv")
header = csvfile.readline()
csv_f = csv.reader(csvfile)
for row in csv_f:
first_value = float(row[5])
total = sum(first_value)
length = len(first_value)
average = total/length
print("average = ",average)
当我运行此代码时,它说
TypeError: 'float' object is not iterable
但是当我将第7行更改为
时first_value = [float(row[5]) for row in csv_f
然后它的工作原理。这让我感到困惑,任何人都可以帮助我吗?
答案 0 :(得分:1)
另一个答案比我的要优雅得多,但以下内容更接近原始代码的精神。它可能会使您的错误更加明显。我为糟糕的格式道歉。我是这个网站的新手。
import csv
csvfile = open(r"C:\Users\Administrator\Downloads\canberra_2011_2012.csv")
header = csvfile.readline()
csv_f = csv.reader(csvfile)
length = 0
total = 0.0
for row in csv_f:
first_value = float(row[5])
total = total + first_value
length += 1
if length > 0:
average = total/length
print("average = ",average)
答案 1 :(得分:0)
我想你要收集所有first_value
然后进行一些计算。为此,您必须逐步浏览csv文件的每一行,并首先收集所有值,否则您将汇总一个值,这是您的错误的来源。
试试这个版本:
import csv
with open(r"C:\Users\Administrator\Downloads\canberra_2011_2012.csv") as f:
reader = csv.reader(f)
values = [float(line[5]) for line in reader]
# Now you can do your calculations:
total = sum(values)
length = len(values)
# etc.
答案 2 :(得分:0)
您在此代码行中收到此错误
total = sum(first_value)
由于sum
是function
iterable
个对象,因此引发错误。与您的代码一样,first_value
是float
对象。所以你不能使用sum
函数。但是当你使用列表压缩时,
first_value = [float(row[5]) for row in csv_f]
然后first_value
是一个list
类型的对象,其float
值为row[5]
。因此,您可以在其上应用sum
函数而不会引发错误。
除了列表压缩之外,您还可以将值附加到for
循环的列表中,并在循环后计算sum
和length
。
first_values = []
for row in csv_f:
first_value = float(row[5])
first_values.append(first_value)
total = sum(first_values)
length = len(first_values)
average = total/length