解析重新索引仅对具有唯一值的索引对象有效

Pau*_*aul 3 python pandas

我已经查看了许多出现此错误的问题.我正在跑熊猫'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对象有效

sim*_*ple 8

首先,我相信您打算使用以下命令测试重复项:

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)

如果你仔细研究文档,那么这些似乎都没有期待一个字符串.这是我得到的最好的,祝你好运!如果您解决这个问题,请告诉我,因为我也很感兴趣.

  • 是的,我认为你正在做点什么.它可能与@Jeff在github上发布的错误报告有关:https://github.com/pydata/pandas/issues/6240感谢您查看源代码以及更好的最小工作示例. (2认同)