我正在为我拥有的.csv文件的每一列计算标准偏差。至此一切正常,但我不断收到“ TypeError:'float对象不可迭代”消息。但是,为了保持精度,我需要将这些值中的两个设为浮点数。有没有一种方法可以使用浮点数而不使用迭代来进行计算?还是我可以使用浮点数的规则中有例外?
这是我的代码中所需的部分:
import math
fileChoice = input("Enter the file name: ")
inputFile = open(fileChoice)
headers = inputFile.readline().strip().split(',')
dataColumns = []
for i in headers:
dataColumns.append([])
rowCount = 0
for row in inputFile:
rowCount = rowCount + 1
comps = row.strip().split(',')
for j in range(len(comps)):
dataColumns[j].append(float(comps[j]))
l = 0
for entry in dataColumns:
mean = sum(dataColumns[l])/rowCount
stdDevSum = 0
for x in dataColumns:
stdDevSum = float(stdDevSum) + (((float(comps[row]) - float(mean))** 2) for row in range(rowCount))
stdDev = math.sqrt(stdDevSum / rowCount)
print(l + 1, headers[l], max(dataColumns[l]), min(dataColumns[l]), "{0:0.2f}".format(mean), stdDev)
l = l + 1
inputFile.close()
编辑:
已找到解决方案
此行中有错误:
stdDev = math.sqrt((sum((float(comps[l]) - float(mean)) ** 2) in range(rowCount)) / rowCount)
错误特别来自表达式sum((float(comps[l]) - float(mean))
。当您执行sum(something)
时,Python会尝试迭代something
。但是在这种情况下,它要迭代的对象是float(comps[l]) - float(mean)
,它只是一个数字。因此,错误:'float' object is not iterable
。
还请注意,您对in range(rowCount)
的使用是错误的。 a in b
的意思是“如果a
在b
中,则返回true,否则返回false
”。您可能正在寻找for i in iterable
语法。
我假设您希望每一行的总和为comps[row] - mean
。试试这个:
stdDev = math.sqrt(sum( (float(comps[row]) - float(mean)) **2 for row in range(rowCount) ) / rowCount)