Python 在文件中查找平均值
我要做的一件事是从我收到的文件中的数据中找出平均通货膨胀率。它给出了Python 在文件中查找平均值,python,average,mean,Python,Average,Mean,我要做的一件事是从我收到的文件中的数据中找出平均通货膨胀率。它给出了年、利息和通货膨胀,以及它下面的所有数字。看起来像这样 year interest inflation 1900 4.61 8.1 这种情况会持续很久,一直持续到2008年。在德国法典的帮助下,我取得了一些进展。不过我还是被卡住了 到目前为止,代码是这样的 def myTest(file): with open ('filename', 'r') as f: inflation = []
年
、利息
和通货膨胀
,以及它下面的所有数字。看起来像这样
year interest inflation
1900 4.61 8.1
这种情况会持续很久,一直持续到2008年。在德国法典的帮助下,我取得了一些进展。不过我还是被卡住了
到目前为止,代码是这样的
def myTest(file):
with open ('filename', 'r') as f:
inflation = []
header = 1
for line in f:
if header !=1:
infl = line.split(",")[2]
inflation.append(float(infl))
header += 1
avgInflation = sum(inflation)/len(inflation)
return avgInflation
我认为,问题在于,顶层的年利率通胀造成了问题。所以在帮助下,我在代码中添加了一些东西,但仍然出现了一个错误。上面写着被零除的错误,第11行。我现在该怎么办
实际文件名为Inflation.csv。我自己做了一个简单的程序,它在解释器中打印出来,解释器用逗号分隔,因此我做(“,”的原因是,
header+=1
处于header!=1
和标题的初始值为1
。因此,在数组上循环,什么也不做。在计算平均值的方法结束时,inflation
列表仍然为空,因此len(inflation)
解析为0
此外,您正在错误地读取文件中的行。我认为您希望使用f.readlines()
将它们作为行来阅读
def myTest(文件):
将open('filename','r')作为f:
lines=f.readlines()您正在初始化header=1
,并且在检查header
是否不是一个值后,您初始化infl
和inflation
的值,因此,avgInflation=sum(inflation)/len(inflation)
实际上变成:
avgInflation=sum(0/len(0))
在分区中使用之前,请确保检查通货膨胀是否有一个值。也许您想初始化header=0
,因为我看到您在for循环外将变量header
初始化为1。
在for循环中,检查标题是否不等于1,如果它等于1,则不执行任何操作。
For循环永远不会进入if头中=1:
它只是在整个文件上进行迭代,不做任何操作就退出for循环。
在第11行中,len(通货膨胀)
是0,因为您从未向它添加任何内容。
您应该更改条件循环,或者在代码中的某个地方更改变量标题
def myTest(file):
with open ('filename', 'r') as f:
inflation = []
header = 1
for line in f:
if header !=1: //Never goes inside
infl = line.split(",")[2]
inflation.append(float(infl))
header += 1
avgInflation = sum(inflation)/len(inflation) //Divison by zero
return avgInflation
这个怎么样
def myTest(file):
with open ('filename', 'r') as f:
inflation = []
header = 1
for line in f:
if header == 1:
header += 1
continue
else:
infl = line.split(",")[2]
inflation.append(float(infl))
avgInflation = sum(inflation)/len(inflation)
return avgInflation
我认为这应该可以解决问题。如果len(通货膨胀)为零,这意味着你永远不会在通货膨胀列表中添加任何内容。而且您从不向列表中添加任何内容,因为您已将header设置为1,并且仅在header不是1时执行操作。您已将header设置为1。所以,如果块从未被执行。膨胀数组的大小为0,被零除的错误不可避免。您正在传入文件
,但从未使用它。(同样,使用与内置变量同名的变量也不是一个好主意。)只需将header+=1
移动到与if头一致的位置=1
或者直接调用next(f)
并忘记它。另外,如果您有csv,那么最好使用csv库来读取文件。虽然您所展示的内容中似乎有空格,但不确定为什么要用逗号分隔。在顶部,如果我使用header=0,它只会告诉我无法将字符串转换为浮点:(我不确定我是否理解了这个问题。声明和赋值header=0
根本不涉及字符串。对不起,亚尔,就像我说的,我对编程非常陌生。感谢所有的帮助!有人能解释一下+=的作用吗?这与执行header=header+1
完全一样。好的。谢谢你的澄清,他们已经阅读了。)调用readlines实际上是一种更糟糕的方法。
def myTest(file):
with open ('filename', 'r') as f:
inflation = []
header = 1
for line in f:
if header == 1:
header += 1
continue
else:
infl = line.split(",")[2]
inflation.append(float(infl))
avgInflation = sum(inflation)/len(inflation)
return avgInflation