返回

python-子类化 pandas 索引对象

发布时间:2022-07-25 07:38:08 220
# node.js

我正在尝试为 pandasIndex对象创建一个子类,该对象执行简单的类型检查并强制执行命名约定。我的应用程序有一组测量数据的物理机器,每台机器都有自己的数字标识符。我有一组来自不同机器的测量值,并且想跟踪收集了哪些机器数据。我希望我的子类检查机器编号是否有效,并继承pd.Index行为和方法,例如loc.

当我尝试子类化时,pd.Index我得到了意想不到的行为。首先,它告诉我对象的类型是pandas.core.indexes.numeric.Int64Index,而不是我的子类:

import pandas as pd

class MachineIndex(pd.Index):
    MACHINE_IDs = [7, 22, 24]    # valid machine ids
    def __init__(self, ids):
        assert all([_id in MachineIndex.MACHINE_IDs for _id in ids]), "invalid id"
        super().__init__(data=ids, name='Machine ID')
        self._hi = 'hi'

I = MachineIndex([22, 7, 7, 22, 24, 22])
print(type(I))  # pandas.core.indexes.numeric.Int64Index  instead of MachineIndex

其次,我无法访问我放在对象上的虚拟属性:

print(I._hi)    # AttributeError: 'Int64Index' object has no attribute '_hi'

最后,我在为构造函数指定参数名称时遇到了困难:

I = MachineIndex(ids=[22, 7, 7, 22, 24, 22])  # TypeError: MachineIndex(...) must be called with a collection of some kind, None was passed

有没有办法修复这些错误,并且子类化Index对象的最佳方法?我注意到 pandas 文档建议注册自定义访问器而不是子类DataFrame化对象。类似的理念是否适用于Index对象,如果是,是否有可用的示例代码?

特别声明:以上内容(图片及文字)均为互联网收集或者用户上传发布,本站仅提供信息存储服务!如有侵权或有涉及法律问题请联系我们。
举报
评论区(1)
按点赞数排序
用户头像