python - 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,并且希望能够使用平均公式或类似的东西。
解决方案
制作一个小数据框:
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
===
概括:
查看完整的回溯,并将其展示给我们。它可以为错误提供有价值的线索
阅读您使用的函数的文档。
推荐阅读
- python - Python读取无符号16位整数的二进制文件
- python -
保留用 ` `分隔的多行地址 - wso2 - WSO2 API 管理器和 Kerberos
- python - 通过 Python 套接字库的 HTTP 请求
- django - 带有自定义用户模型加载夹具错误的 Django 项目
- django - Python 3.7 / Django 2.2.1:保存前检查字段
- express - 具有一个 API(路由)的 Express 应用程序,该 API(路由)将 fullName 作为查询参数并将其拆分为 firstName 和 lastName 作为输出
- aframe - 如何正确地用 10 制作游泳池
s A 型架 - javascript - 看来我的 JSX 代码生成单元(HTML td 元素)有一些问题
- unity3d - 使网格部分半透明并且仍然接收正确的阴影