2013-11-25 63 views
0

我希望能够在DataFrame中有一些通用对象实例的列标签。因此,而不是一个个STR对象,一个简单的类,它包装STR并提供一些额外的功能:熊猫指数对象

class WrapStr(object): 
    def __init__(self,str): 
     self.str = str 
    def __eq__(self,other): 
     return self.str == other.str 
    def __repr__(self): 
     return self.str 

的问题是,pd.Index不呼吁WrapStr实例EQ方法而只是检查是否这两个实例是相同的。

first_ins = WrapStr('col1') 
my_ix = pd.Index([first_ins]) 
sec_ins = WrapStr('col1') 

print first_ins in my_ix # True 
print sec_ins in my_ix # False 

它看起来像包含检查在https://github.com/pydata/pandas/blob/master/pandas/index.pyx线92和448

如何支持这样的扩展列标签任何想法界定?

+0

这是一般不可能的。这些字符串需要c-hashable,IOW,做索引计算的c-libs需要字符串。你可以尝试定义''__hash__'',可能工作。 – Jeff

+0

谢谢杰夫的快速反应! – bjonen

回答

1

添加__hash__方法WrapStr

class WrapStr(object): 
    def __init__(self,str): 
     self.str = str 
    def __eq__(self,other): 
     return self.str == other.str 
    def __repr__(self): 
     return self.str 
    def __hash__(self): 
     return hash(self.str) 

first_ins = WrapStr('col1') 
my_ix = pd.Index([first_ins]) 
sec_ins = WrapStr('col1') 

print first_ins in my_ix # True 
print sec_ins in my_ix # False 
+0

非常好。这有效,使大熊猫对我更有用。谢谢。 – bjonen