从 .csv 文件计算所需的浮点迭代

Float iteration needed for calculation from .csv file

我想计算我拥有的 .csv 文件每一列的标准偏差。到目前为止一切正常,但我不断收到 "TypeError: 'float object is not iterable" 消息。但是,我需要其中两个值是浮点数,以便保留小数位以确保准确性。有没有办法用浮点数而不是迭代来进行这个计算?或者我可以使用浮点数的规则有例外吗?

这是我的代码中需要的部分:

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 表示 "return true if a is in b, return false otherwise"。您可能正在寻找 for i in iterable 语法。

解决方案

我假设您希望每一行的总和为 comps[row] - mean。试试这个:

stdDev = math.sqrt(sum( (float(comps[row]) - float(mean)) **2 for row in range(rowCount) ) / rowCount)