首页 > 解决方案 > Python - TypeError:元组索引必须是整数或切片,而不是 numpy.float64

问题描述

对于看起来很简单的事情出现此错误。帮助将不胜感激。

finaltbl 是一个带有 col1prelim、col2prelim 和 col3prelim 的 pandas 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,并且希望能够使用平均公式或类似的东西。

标签: pythonnumpy

解决方案


制作一个小数据框:

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

尝试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

请注意,尝试使用轴变量时会发生错误。如果arr是一个 numpy 数组,那么arr.shape是一个元组。 (1,2,3)[1.0]会产生同样的错误信息。

来自np.mean文档:

Signature: np.mean(a, axis=None, ...)

第一个参数是一个数组(或可以制成数组的东西)。第二个是轴值 - None、整数或整数元组。相反,您给它一个数据框元素,显然是一个浮点数。

所以你需要给出np.mean正确的论据。例如数据框元素列表:

In [22]: np.mean([df.loc[0,1],df.loc[1,1]])                                               
Out[22]: 2.5

===

概括:

  • 查看完整的回溯,并将其展示给我们。它可以为错误提供有价值的线索

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


推荐阅读