Python-TypeError:元组索引必须是整数或切片,而不是numpy.float64

时间:2019-06-19 23:30:54

标签: python numpy

从看起来很简单的错误中获取此错误。帮助将不胜感激。

finaltbl是具有col1prelim,col2prelim和col3prelim的熊猫df,其浮点格式的值在0到1之间。

finaltbl['col1'] = np.nan
finaltbl['col2'] = np.nan
finaltbl['col3'] = np.nan
coldict = {'col1':'col1prelim', 'col2':'col2prelim', 'col3':'col3prelim'}

for k, v in coldict.items():
    finaltbl.at[0, k] = 1
    finaltbl.at[1, k] = np.mean(finaltbl.loc[0, v], finaltbl.loc[1, v])

这将返回TypeError: tuple indices must be integers or slices, not numpy.float64

但这可行:

for k, v in coldict.items():
    finaltbl.at[0, k] = 1
    finaltbl.at[1, k] = (finaltbl.loc[0, v] + finaltbl.loc[1, v])/2

如何更改上述平均/均值才能正常工作?以后我需要使用3或4个输入而不是2个,并且希望能够使用均值公式或类似的东西。

3 个答案:

答案 0 :(得分:1)

对这些值执行numpy.mean()时,结果存储在Numpy的内部numpy.float类型中,该类型不能用作索引器。您需要将变量转换为和整数。

对于标量值,int()很好-这就是您的情况。对于float64 ndarray,您需要使用Numpy的astype()方法。

答案 1 :(得分:1)

@hpaulj:TL; DR

np.mean通常只需要一个参数。输入错误

np.mean(finaltbl.loc[0, v], finaltbl.loc[1, v])
如果将2个参数使用方括号放在单个数组中,则会消除

np.mean([finaltbl.loc[0, v], finaltbl.loc[1, v]])

答案 2 :(得分:0)

制作一个小的数据框:

trackByIds

尝试像实际一样使用In [17]: df = pd.DataFrame(np.arange(12.).reshape(4,3)) In [18]: df Out[18]: 0 1 2 0 0.0 1.0 2.0 1 3.0 4.0 5.0 2 6.0 7.0 8.0 3 9.0 10.0 11.0 ,显示FULL回溯:

mean

请注意,尝试使用轴变量时会发生错误。如果In [19]: np.mean(df.loc[0,1],df.loc[1,1]) --------------------------------------------------------------------------- TypeError Traceback (most recent call last) <ipython-input-19-19b913c69c93> in <module> ----> 1 np.mean(df.loc[0,1],df.loc[1,1]) /usr/local/lib/python3.6/dist-packages/numpy/core/fromnumeric.py in mean(a, axis, dtype, out, keepdims) 3113 pass 3114 else: -> 3115 return mean(axis=axis, dtype=dtype, out=out, **kwargs) 3116 3117 return _methods._mean(a, axis=axis, dtype=dtype, /usr/local/lib/python3.6/dist-packages/numpy/core/_methods.py in _mean(a, axis, dtype, out, keepdims) 60 61 is_float16_result = False ---> 62 rcount = _count_reduce_items(arr, axis) 63 # Make this warning show up first 64 if rcount == 0: /usr/local/lib/python3.6/dist-packages/numpy/core/_methods.py in _count_reduce_items(arr, axis) 53 items = 1 54 for ax in axis: ---> 55 items *= arr.shape[ax] 56 return items 57 TypeError: tuple indices must be integers or slices, not numpy.float64 是一个numpy数组,则arr是一个元组。 arr.shape会产生相同的错误消息。

来自(1,2,3)[1.0]文档:

np.mean

第一个参数是一个数组(或可以做成数组的东西)。第二个是轴值-Signature: np.mean(a, axis=None, ...) ,一个整数或整数元组。取而代之的是给它一个数据框元素,显然是浮点数。

因此,您需要给None提供正确的参数。例如数据框元素列表:

np.mean

===

摘要:

  • 查看完整的追溯,并将其显示给我们。它可以提供有关错误之处的宝贵线索

  • 阅读所使用函数的文档。