Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/308.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 - Fatal编程技术网

Python 如何调试此错误';浮动';对象不可编辑?

Python 如何调试此错误';浮动';对象不可编辑?,python,Python,我试图计算列表中数字的平均值,我应该跳过第一个观察值(即位置0),因为它们是国家的名称,我只需要计算[0]之后每列的平均值。 然而,我的代码一直在说: TypeError:“float”对象不可编辑 如果有人能看一看并提供一些帮助,我将不胜感激。谢谢大家! p、 s我不能使用numpy或pandas test_list = [['name1', 6.039330006, 0, 0.00, 67.53870392, 0.831966162, -0.186299905, None], ['name2

我试图计算列表中数字的平均值,我应该跳过第一个观察值(即位置0),因为它们是国家的名称,我只需要计算
[0]
之后每列的平均值。 然而,我的代码一直在说:

TypeError:“float”对象不可编辑

如果有人能看一看并提供一些帮助,我将不胜感激。谢谢大家!

p、 s我不能使用
numpy
pandas

test_list = [['name1', 6.039330006, 0, 0.00, 67.53870392, 0.831966162, -0.186299905, None], ['name2', 4.287736416, 9.034710884, 0.697924912, 65.12568665, 0.613697052, -0.132166177, 0.00001]]  
定义我的意思(文件):
#此函数用于计算文件中每列的平均值
平均值列表=[]
对于范围(0,len(文件))中的行:
对于范围(1,len(文件[0])中的列:
如果文件[行][列]!=无:
平均值=stat.mean(文件[行][列])
#平均值=总和(文件[行][列])/len(1,文件[行][列])
平均值列表。追加(平均值)
打印(“平均值为{0}”。格式(平均值列表))
使用类似的代码,我可以得到:


最小值为
[-0.186299905,0.24690991]
对于
测试列表中的两列

对于数据的每一列,我们构建一个包含值的列表,过滤掉
值,并将其传递给
平均值

import statistics

def my_mean(file): 
    # This function calculates the mean value of each column in the file
    mean_list = [ ]
    for column in range(1,len(file[0])):
        column_values = (row[column] for row in file)
        mean_list.append(statistics.mean(val for val in column_values if val is not None))

    return mean_list          


test_list = [['name1', 6.039330006, 0, 0.00, 67.53870392, 0.831966162, -0.186299905, None], ['name2', 4.287736416, 9.034710884, 0.697924912, 65.12568665, 0.613697052, -0.132166177, 0.00001]]  
print(my_mean(test_list))

# [5.163533211000001, 4.517355442, 0.348962456, 66.33219528500001, 0.722831607, -0.159233041, 1e-05]
您还可以使用
zip
构建列列表,然后计算列表中的平均值:

import statistics

def my_mean(file): 
    columns = list(zip(*file))[1:]
    mean_list = [statistics.mean(val for val in column if val is not None) for column in columns]
    return mean_list          


test_list = [['name1', 6.039330006, 0, 0.00, 67.53870392, 0.831966162, -0.186299905, None], ['name2', 4.287736416, 9.034710884, 0.697924912, 65.12568665, 0.613697052, -0.132166177, 0.00001]]  
print(my_mean(test_list))

# [5.163533211000001, 4.517355442, 0.348962456, 66.33219528500001, 0.722831607, -0.159233041, 1e-05]
那么:

test_list = [['name1', 6.039330006, 0, 0.00, 67.53870392, 0.831966162, -0.186299905, None],
             ['name2', 4.287736416, 9.034710884, 0.697924912, 65.12568665, 0.613697052, -0.132166177, 0.00001]]  
它给出:

结果


[5.16353211000001,9.034710884,0.697924912,66.33219528500001,0.722831607,-0.159233041,1e-05]

如果我遵循你的方法,我会这样做:

def my_mean(file): 
mean_list = []
for row in range(len(file)): 
    temp_column = []
    for column in range(len(file[row])):
        if isinstance(file[row][column], (int, float)):
            temp_column.append(file[row][column])

    mean_value = sum(temp_column) / len(temp_column)
    mean_list.append(mean_value)

print("The mean values are {0}".format(mean_list))

欢迎来到SO!请给我们看一下回溯,以及你是如何调用你的函数的。请给我们看一个。@YasinYousif,它将排除等于0的值,这将改变平均值。非常感谢,它适用于测试列表,但您知道为什么它会对作为函数内变量的列表产生此错误吗?TypeError:“@Thierrylahuille,没错,。。我想我讨厌使用像
None==None
这样的公式,我觉得它总是会随着版本的不同而变化。。(在javascript中,这是用来制造麻烦的)。所以,在我有限的知识范围内,不使用它们更安全@这个错误一定发生在你代码的其他部分,这里没有比较。如果你不设法解决它,你可以问另一个问题@YasinYousif使用
None
在Python中是非常安全的。如中所述,“此类型有一个值。有一个具有此值的对象。此对象通过内置名称None访问。它用于表示在许多情况下没有值,例如,它是从没有显式返回任何内容的函数返回的。”。测试一个值是否为
None
的传统方法是
如果值为None:
,从而测试两者是否是同一个对象。
mean([0,2])
返回
2.0
,这肯定是错误的。@Thierrylahuille,注意到谢谢,你知道它不迭代浮动值的原因吗?是的,在您的代码中,您有
stat.mean(文件[行][列])
,它是一个浮点数,一个单一的数字。为了计算平均值,您需要
sum()
并除以
len()
,为了从
len()
中得到答案,您需要遍历这些项,但是当你传递一个对象时,你不能对它进行迭代。好吧,这可能与我在传递函数中定义的列表/变量时遇到的
TypeError:无法将类型“str”转换为分子/分母
错误有关?关于这一点,你可能需要阅读:
def my_mean(file): 
mean_list = []
for row in range(len(file)): 
    temp_column = []
    for column in range(len(file[row])):
        if isinstance(file[row][column], (int, float)):
            temp_column.append(file[row][column])

    mean_value = sum(temp_column) / len(temp_column)
    mean_list.append(mean_value)

print("The mean values are {0}".format(mean_list))