从对象索引

2024-09-28 23:41:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我想能够有列标签在一个数据帧,这是一些通用对象的实例。因此,不是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索引不调用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中定义的。你知道吗

关于如何支持这种扩展列标签有什么想法吗?你知道吗


Tags: 对象实例selfreturnmydef标签first
1条回答
网友
1楼 · 发布于 2024-09-28 23:41:20

__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

相关问题 更多 >