在扩展的`pandas.DataFrame`类中添加列

时间:2019-08-13 08:21:20

标签: python pandas dataframe inheritance

我创建了pandas.DataFrame的子类以捆绑一些功能:

class ABT(pandas.DataFrame):
    def __init__(self, data=None, ...):
        if data is None:
            ...
            data = DataFrame(..., tz='utc'))
        super(ABT, self).__init__(data)

我想制作一个使用另一个DataFrame作为参数并将其附加到ABT的方法。问题是:如何加入/合并/加入self

    def add_df(self, new_df):
        df_utc = new_df.tz_localize('CET', ambiguous='NaT').tz_convert('utc')

        ...

        self.merge(df_utc , how='left', inplace=True)

上述方法不起作用,但我希望有一种解决方案。

1 个答案:

答案 0 :(得分:1)

merge没有inplace关键字。除此之外,您还应该阅读Subclassing pandas datastructures。所以你需要这样的东西:

class ABT(pd.DataFrame):

    @property
    def _constructor(self):
        return ABT

    @property
    def _constructor_sliced(self):
        return pd.Series

    def add_df(self, new_df):
        return self.merge(new_df, how='left')



abt1 = ABT(df1)
abt2 = ABT(df2)
abt1 = abt1.add_df(abt2)

如果您未定义构造函数,则add_df()的结果将是pandas.core.frame.DataFrame类型,而不是ABT