2014-12-23 2 views
3

Я получаю сообщение об ошибке при использовании подкласса pd.Index, который содержит непримитивные значения. Я использую pandas 0.13.1.«максимальная глубина рекурсии превышена» при подклассе pandas.Index

Быстрая демонстрация:

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 

Вопросы:

  1. Является ли это ошибка или я делаю что-то не так?
  2. Что это лучший способ исправить/обход этой ошибки, в тот же время (а) с использованием подкласса из pd.Index (мой подкласс включает расширенный интерфейс), и (б) содержит непримитивных значения (объекты пользовательский класс).

ответ

1

Вы используете довольно старую версию pandas (ток 0.15.2). Таким образом, Index в конечном счете является подклассом ndarray довольно негибким классом для подкласса. Pandas переходит к NOT sub-class в 0.15.0.

Не уверен в ваших целях здесь. Использование индекса пользовательских объектов довольно сложно для правильного. У Pandas появился новый индексный тип, начинающийся в 0.16.0 (см. here), а также целая панорама индексов, представляющих различные типы. Хранение объектов вообще не выполняется и может вызвать сильную боль.

Если вы просто хотите расширить некоторые аспекты пользовательской юзабилити, то может быть более дружелюбным к простым делать this.

+1

Я вижу, что это всего лишь 10 месяцев. При работе с большой сложной системой это слишком рискованно и требует много времени для обновления до новой версии так часто. Я * делаю * оценить темп, в котором панды улучшаются и развиваются (серьезно, это потрясающе), но, к сожалению, я не могу позволить себе так часто обновляться. – shx2

Смежные вопросы