[英]only integer scalar arrays can be converted to a scalar index error in Hyperopt
[英]Type error: only integer scalar arrays can be converted to a scalar index when doing .loc with pandas DataFrame
我有一个简单的df:
a = pd.DataFrame([[1,2,3,5,8],['jack','jeff',np.nan,np.nan,'tesla']])
a.index = [['number','name']]
a=a.T
它看起来像这样:
number name
0 1 jack
1 2 jeff
2 3 NaN
3 5 NaN
4 8 tesla
当我想像a.loc[a['number']==5]
那样做 a.loc 时,我收到了这种类型的错误:
Traceback (most recent call last):
File "c:\Users\Administrator\Documents\proj\test.py", line 13, in <module>
a.loc[a['number']==5]
File "C:\ProgramData\Anaconda3\lib\site-packages\pandas\core\frame.py", line 2878, in __getitem__
return self._get_item_cache(key)
File "C:\ProgramData\Anaconda3\lib\site-packages\pandas\core\generic.py", line 3541, in _get_item_cache
values = self._mgr.iget(loc)
File "C:\ProgramData\Anaconda3\lib\site-packages\pandas\core\internals\managers.py", line 988, in iget
block = self.blocks[self.blknos[i]]
TypeError: only integer scalar arrays can be converted to a scalar index
我搜索了此错误并尝试了一些解决方案,例如使用a.loc[np.array(a)['number']==5]
或重新安装 pandas 和 numpy 或 Z7E3332C5FD0270D97C964E52BA184AD88 工作。
我的 pandas 版本是 1.3 而 numpy 版本是 1.19.2
原因是您的专栏是MultiIndex
:
a.columns
#MultiIndex([('number',),
# ( 'name',)],
# )
执行a['number']
时会发生错误。 用列表而不是列表替换索引重命名应该修复,即而不是:
a.index = [['number','name']]
做:
a.index = ['number','name']
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.