解决重新索引仅对具有唯一值的索引对象有效
Posted
技术标签:
【中文标题】解决重新索引仅对具有唯一值的索引对象有效【英文标题】:Resolving Reindexing only valid with uniquely valued Index objects 【发布时间】:2014-02-27 07:31:48 【问题描述】:我已经查看了许多与此错误相关的问题。我正在运行 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() 来自此问答:problems with reindexing dataframes: Reindexing only valid with uniquely valued Index objects
"Reindexing only valid with uniquely valued Index objects" 好像不适用
我认为我的 pandas 版本# 还可以,所以这应该不是问题 pandas Reindexing only valid with uniquely valued Index objects
【问题讨论】:
您正在处理列,它们显然是非唯一的,因为根据定义,您正在使用重复项。你到底想做什么? 你是对的。但请注意,在这两种情况下,列在获取后都不是唯一的,但在前一种情况下它会返回错误,而在后一种情况下则没有错误并返回正确的结果。我的实际用例是与机器学习相关的,其中我有一个 MxN 矩阵,表示 N 空间中的 M 个特征向量。我想每 10-15 列重复一次分类列,以便在滚动查看特征向量时不会丢失分类。话虽如此,我将不胜感激上述问题的解决方案/解释 可能是一个错误:github.com/pydata/pandas/issues/6240;您通常要小心重复的列。您不应该仅仅为了查看事物而创建重复的列。 【参考方案1】:首先,我相信您打算使用以下命令测试重复项:
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) ])
这可能是一个错误,因为如果您在第 86 行和第 1228 行检查名为“index.py”的核心文件,它所期望的类型是(分别):
_engine_type = _index.ObjectEngine
_engine_type = _index.Int64Engine
如果您更深入地查看文档,那么它们似乎都不期望字符串。这是我得到的最好的,祝你好运!!如果您解决了这个问题,请告诉我,因为我也有兴趣。
【讨论】:
是的,我认为你在做某事。这可能与@Jeff 在 github 上发布的错误报告有关:github.com/pydata/pandas/issues/6240 感谢您查看源代码以及更好的最小工作示例。以上是关于解决重新索引仅对具有唯一值的索引对象有效的主要内容,如果未能解决你的问题,请参考以下文章