Python 3.x 为什么第二次迭代总是失败?

Python 3.x 为什么第二次迭代总是失败?,python-3.x,pandas,numpy,Python 3.x,Pandas,Numpy,我试图通过基于五个位置过滤数据帧来创建z_分数的dict 无论列表中的第一个位置是哪个,我总是将第一个key:value对放入 无论哪个位置是第二个,我总是会得到这个错误: Traceback (most recent call last): File "C:\Program Files\JetBrains\PyCharm 2018.2.1\plugins\python\helpers\pydev\pydevd.py", line 1434, in _exec pydev_impor

我试图通过基于五个位置过滤数据帧来创建z_分数的dict

无论列表中的第一个位置是哪个,我总是将第一个key:value对放入 无论哪个位置是第二个,我总是会得到这个错误:

Traceback (most recent call last):
  File "C:\Program Files\JetBrains\PyCharm 2018.2.1\plugins\python\helpers\pydev\pydevd.py", line 1434, in _exec
    pydev_imports.execfile(file, globals, locals)  # execute the script
  File "C:\Program Files\JetBrains\PyCharm 2018.2.1\plugins\python\helpers\pydev\_pydev_imps\_pydev_execfile.py", line 18, in execfile
    exec(compile(contents+"\n", file, 'exec'), glob, loc)
  File "C:/Users/Mark/PycharmProjects/main/main.py", line 104, in <module>
    z_score = z_score(base, df['SalePrice'])
TypeError: 'numpy.float64' object is not callable

在python中,解释器在局部作用域中对变量名的优先级高于方法名,因此当您使用
z_score
作为变量名时,如果您更改
z_score
变量的名称,它会屏蔽对
z_score
方法名的访问,您的代码应该运行。

尝试使用一个不是'z_score
的变量名,python混淆了浮点值
z_score`和方法名
z_score
。就是这样。非常感谢。听起来不错,我回答了
    def z_score(val, array, bessel=0):
        mean = array.mean()
        st_dev = std(array, ddof=bessel)
        distance = val - mean
        z = distance / st_dev

        return z


    neighborhoods = ['NAmes', 'CollgCr', 'OldTown', 'Edwards', 'Somerst']

    base = 200000
    z_scores = {}
    for neighborhood in neighborhoods:
        df = houses.loc[houses['Neighborhood'] == neighborhood]
        z_score = z_score(base, df['SalePrice'])
        z_scores[neighborhood] = z_score


    sorted_z_scores = sorted(z_scores.items(), key=lambda x: x[1], reverse=True)
    print(sorted_z_scores)