我创建了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)
上述方法不起作用,但我希望有一种解决方案。
答案 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
。