从看起来很简单的错误中获取此错误。帮助将不胜感激。
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个,并且希望能够使用均值公式或类似的东西。
答案 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
===
摘要:
查看完整的追溯,并将其显示给我们。它可以提供有关错误之处的宝贵线索
阅读所使用函数的文档。