Python &引用;超过最大递归深度;子类化pandas.Index时

Python &引用;超过最大递归深度;子类化pandas.Index时,python,pandas,runtime-error,series,Python,Pandas,Runtime Error,Series,如果使用包含非原语值的pd.Index子类,我会得到一个错误。我正在使用pandas 0.13.1 快速演示: import pandas as pd class MyIndex(pd.Index): pass # MyIndex = pd.Index <-- if not subclassing, no problem o1 = object(); o2 = object() # <-- if using primitives, no problem j = MyIndex

如果使用包含非原语值的
pd.Index
子类,我会得到一个错误。我正在使用
pandas 0.13.1

快速演示:

import pandas as pd

class MyIndex(pd.Index): pass
# MyIndex = pd.Index  <-- if not subclassing, no problem

o1 = object(); o2 = object()  # <-- if using primitives, no problem
j = MyIndex([ o1, o2 ])
i = pd.Index(j)
j2 = MyIndex([ o2 ])
i2 = pd.Index(j2)

try:
    print pd.Series([ 4,5 ], index = j)[j2]  # <-- RuntimeError: maximum recursion depth exceeded while calling a Python object
except RuntimeError, e:
    print e
print pd.Series([ 4,5 ], index = j)[i2]  # <-- works as expected
print pd.Series([ 4,5 ], index = i)[j2]  # <-- works as expected
将熊猫作为pd导入
类MyIndex(pd.Index):通过

#MyIndex=pd.Index您使用的是相当旧的pandas版本(当前为0.15.2)。因此,
Index
最终是
ndarray
的一个子类,对于子类来说是一个非常不灵活的类。Pandas在0.15.0中更改为非子类

我不确定你在这里的目标。使用自定义对象索引是非常棘手的。Pandas在0.16.0中有一个新的索引类型(请参见),还有一整套表示各种类型的索引。存储对象根本不起作用,可能会引起极大的痛苦


如果您只是想扩展自定义可用性的某些方面,那么简单的做法可能更合适。

我看到它只有10个月的历史。在处理大型复杂系统时,如此频繁地升级到新版本既危险又耗时。我很欣赏熊猫的进步和进化速度(说真的,这太棒了),但不幸的是,我负担不起如此频繁的升级。