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

问题描述 投票:1回答:1

我正在为我拥有的.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()

编辑:

已找到解决方案

python iteration standard-deviation
1个回答
2
投票

此行中有错误:

    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的意思是“如果ab中,则返回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)
© www.soinside.com 2019 - 2024. All rights reserved.