Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在文件中查找平均值_Python_Average_Mean - Fatal编程技术网

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