TypeError:' float'对象不可迭代3

时间:2014-08-13 13:30:42

标签: python csv

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

然后它的工作原理。这让我感到困惑,任何人都可以帮助我吗?

3 个答案:

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

由于sumfunction iterable个对象,因此引发错误。与您的代码一样,first_valuefloat对象。所以你不能使用sum函数。但是当你使用列表压缩时,

first_value = [float(row[5]) for row in csv_f]

然后first_value是一个list类型的对象,其float值为row[5]。因此,您可以在其上应用sum函数而不会引发错误。

除了列表压缩之外,您还可以将值附加到for循环的列表中,并在循环后计算sumlength

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