子类化熊猫Dataframe和Series以添加自定义属性

问题描述

我想将pandas Dataframe和Series子类化,以添加变量单位作为自定义属性。此属性应附加到我的子类系列中,但也可用于我的子类数据框的列。下面的一些陈述或多或少表明了我的想法。

df = SubclassedDataframe({'length': [1,2,3],'time': [4,5,6],'mass': [7,8,9]})
df[['length']].units = 'm'
df[['time']].units = 's'
df[['mass']].units = 'kg'
df[['length']] # 'm'
df.units # ['m','s','kg']

我尝试了以下方法,但这不起作用。我认为这是因为数据框的列未在内部存储为Series。我将如何实现所需的行为?

class SubclassedSeries(pd.Series):

    _metadata = ['_units']
    
    @property
    def _constructor(self):
        return SubclassedSeries

    @property
    def _constructor_expanddim(self):
        return SubclassedDataframe

    @property
    def units(self):
        if not hasattr(self,'_units'):
            self._units = None
        return self._units

    @units.setter
    def units(self,units):
        self._units = units


class SubclassedDataframe(pd.DataFrame):

    @property
    def _constructor(self):
        return SubclassedDataframe

    @property
    def _constructor_sliced(self):
        return SubclassedSeries

    @property
    def units(self):
        return [col.units for name,col in self.iteritems()]

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)