我已经查看了许多出现此错误的问题.我正在跑熊猫'0.10.1'
df = DataFrame({'A' : np.random.randn(5),
'B' : np.random.randn(5),'C' : np.random.randn(5),
'D':['a','b','c','d','e'] })
#gives error
df.take([2,0,1,2,3], axis=1).drop(['C'],axis=1)
#works fine
df.take([2,0,1,2,1], axis=1).drop(['C'],axis=1)
Run Code Online (Sandbox Code Playgroud)
我只能看到,在前一种情况下,我有非数字列,它似乎以某种方式影响索引但是下面的命令返回空:
df.take([2,0,1,2,3], axis=1).index.get_duplicates()
Run Code Online (Sandbox Code Playgroud)
重新索引错误没有任何意义似乎不适用,因为我的旧索引是唯一的.
据我所知,使用此命令df.take([2,0,1,2,3],axis = 1).index.get_duplicates()可以判断我的索引是唯一的:重新索引数据帧的问题:仅重新编制索引对于唯一值的Index对象有效
"重新索引仅对具有唯一值的索引对象有效"似乎不适用
我认为我的pandas版本#是正常的,所以这应该是bug应该不是问题pandas重新索引只对有唯一值的Index对象有效
首先,我相信您打算使用以下命令测试重复项:
df.take([2,0,1,2,3],axis=1).columns.get_duplicates()
Run Code Online (Sandbox Code Playgroud)
因为如果您使用索引而不是列,那么它显然会返回一个空数组,因为随机浮点值不会重复.正如预期的那样,上面的命令返回:
['C']
Run Code Online (Sandbox Code Playgroud)
其次,我认为你是对的,非数字列正在抛弃它,因为即使你使用以下内容,仍然有一个错误:
df = DataFrame({'A' : np.random.randn(5), 'B' : np.random.randn(5),'C' :np.random.randn(5), 'D':[str(x) for x in np.random.randn(5) ]})
Run Code Online (Sandbox Code Playgroud)
它可能是一个错误,因为如果你查看名为'index.py'的核心文件,在第86行和第1228行,它所期望的类型是(分别):
_engine_type = _index.ObjectEngine
_engine_type = _index.Int64Engine
Run Code Online (Sandbox Code Playgroud)
如果你仔细研究文档,那么这些似乎都没有期待一个字符串.这是我得到的最好的,祝你好运!如果您解决这个问题,请告诉我,因为我也很感兴趣.