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

时间:2014-02-03 17:29:37

标签: 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)

我唯一可以看到的是,在前一种情况下,我有非数字列,它似乎以某种方式影响索引但是下面的命令返回空:

df.take([2,0,1,2,3], axis=1).index.get_duplicates()

Reindexing error makes no sense似乎不适用,因为我的旧索引是唯一的。

我的索引看起来很独特,据我所知,使用此命令df.take([2,0,1,2,3],axis = 1).index.get_duplicates()来自此Q& A:{{ 3}}

problems with reindexing dataframes: Reindexing only valid with uniquely valued Index objects似乎不适用

我认为我的pandas版本#是正常的,所以这应该是bug不应该是问题"Reindexing only valid with uniquely valued Index objects"

1 个答案:

答案 0 :(得分:7)

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

df.take([2,0,1,2,3],axis=1).columns.get_duplicates()

因为如果使用索引而不是列,那么显然会返回一个空数组,因为随机浮点值不会重复。上述命令按预期返回:

['C']

其次,我认为你是对的,非数字列正在抛弃它,因为即使你使用以下内容,仍然会有错误:

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) ]})

这可能是一个错误,因为如果你查看名为'index.py'的核心文件,在第86行和第1228行,它所期望的类型是(分别):

_engine_type = _index.ObjectEngine


_engine_type = _index.Int64Engine

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