从 .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)
我想计算我拥有的 .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)