在切割DataFrame的子类时传递元数据

时间:2017-03-23 08:13:23

标签: python pandas

我创建了一个继承自pandas.DataFrame的类。在此类中添加元数据(不是列,而是添加到类实例):

class MeasurementPoint(pandas.DataFrame):

    def __init__(self, data, metadata):
        super(MeasurementPoint, self).__init__(data)
        self.metadata = metadata

    # in order to return MeasurementPoint instead of DataFrame, define _constructor
    def _constructor(self):
        return MeasurementPoint

如果我对类进行切片,则会得到一个TypeError,因为__init__缺少必需的参数metadata。 我尝试修改_constructor以传递metadata,但没有成功。 我还尝试将metadata作为附加属性(_metadata' = ['metadata'])添加到该类中,如下所述:http://pandas.pydata.org/pandas-docs/stable/internals.html,但无济于事。

如何让MeasurementPoint类在切片时保留元数据?

1 个答案:

答案 0 :(得分:0)

不确定它是否被认为是回答您自己的问题的好形式,但以下似乎有效:

class MeasurementPoint(pandas.DataFrame):

    _metadata = ['metadata']

    def __init__(self, *args, **kwargs):
        metadata = kwargs.pop('metadata', {})
        super(MeasurementPoint, self).__init__(*args, **kwargs)
        self.metadata = metadata

    @property
    def _constructor(self):
        return MeasurementPoint