来自对象的熊猫索引

时间:2013-11-25 14:32:48

标签: python pandas

我希望能够在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行中定义包含检查。

有关如何支持此类扩展列标签的任何想法?

1 个答案:

答案 0 :(得分:2)

__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