将函数应用于 Pandas DataFrame 的子类只是 returns DataFrame 现在是子类
Applying function to subclass of Pandas DataFrame just returns DataFrame and now Subclass
我正在尝试子类化 Pandas' DataFrame 对象。
class AbundanceFrame(pd.DataFrame):
'Subclass of DataFrame used for creating simulated dataset with various component timeseries'
def __init__(self, days,*args,**kw):
'Constructor for AbundanceFrame class, must pass index of timeseries'
super(AbundanceFrame,self).__init__(index = days,*args,**kw)
self.steps = 0
self.monotonic = 0
我有许多其他方法可以将模拟时间序列添加到生成的 AbundanceFrame 中。生成的丰度框架采用以下形式:
然后我想对丰度框架中的所有数据应用泊松采样噪声。
def apply_poisson_noise(self,keys=False):
temp = self.copy()
#print type(temp)
if keys != False:
for key in keys:
temp[key] = np.random.poisson(self[key])
else:
temp = self.apply(np.random.poisson)
return temp
有了上面的内容,我可以毫无问题地创建一个 AbundanceFrame。但是,当我尝试 apply_poisson_noise() 时,它 return 是一个 DataFrame 而不是 AbundanceFrame。我一直在网上搜索,但没有找到将函数应用于 pandas 的 DataFrames 的方法。
我想知道如何获得此功能和 return AbundanceFrame。
谢谢!
解决了问题:(基于 user4589964 的响应)
在 apply_poisson_noise() 中,我只是调用 AbundanceFrame 构造函数并为其提供计算数据。
from copy import deepcopy
class AbundanceFrame(pd.DataFrame):
'Subclass of DataFrame used for creating simulated dataset with various component timeseries'
def __init__(self, days,steps=0,monotonic=0,*args,**kw):
'Constructor for AbundanceFrame class, must pass index of timeseries'
super(AbundanceFrame,self).__init__(index = days,*args,**kw)
self.steps = steps
self.monotonic = monotonic
def apply_poisson_noise(self,keys=False):
temp = deepcopy(self)
if keys != False:
for key in keys:
temp[key] = np.random.poisson(self[key])
temp = AbundanceFrame(self.index, columns=self.columns, data = temp.values,
steps=self.steps, monotonic=self.monotonic)
else:
temp = AbundanceFrame(self.index, columns=self.columns, data = self.apply(np.random.poisson),
steps=self.steps, monotonic=self.monotonic)
return temp
我正在尝试子类化 Pandas' DataFrame 对象。
class AbundanceFrame(pd.DataFrame):
'Subclass of DataFrame used for creating simulated dataset with various component timeseries'
def __init__(self, days,*args,**kw):
'Constructor for AbundanceFrame class, must pass index of timeseries'
super(AbundanceFrame,self).__init__(index = days,*args,**kw)
self.steps = 0
self.monotonic = 0
我有许多其他方法可以将模拟时间序列添加到生成的 AbundanceFrame 中。生成的丰度框架采用以下形式:
然后我想对丰度框架中的所有数据应用泊松采样噪声。
def apply_poisson_noise(self,keys=False):
temp = self.copy()
#print type(temp)
if keys != False:
for key in keys:
temp[key] = np.random.poisson(self[key])
else:
temp = self.apply(np.random.poisson)
return temp
有了上面的内容,我可以毫无问题地创建一个 AbundanceFrame。但是,当我尝试 apply_poisson_noise() 时,它 return 是一个 DataFrame 而不是 AbundanceFrame。我一直在网上搜索,但没有找到将函数应用于 pandas 的 DataFrames 的方法。
我想知道如何获得此功能和 return AbundanceFrame。
谢谢!
解决了问题:(基于 user4589964 的响应) 在 apply_poisson_noise() 中,我只是调用 AbundanceFrame 构造函数并为其提供计算数据。
from copy import deepcopy
class AbundanceFrame(pd.DataFrame):
'Subclass of DataFrame used for creating simulated dataset with various component timeseries'
def __init__(self, days,steps=0,monotonic=0,*args,**kw):
'Constructor for AbundanceFrame class, must pass index of timeseries'
super(AbundanceFrame,self).__init__(index = days,*args,**kw)
self.steps = steps
self.monotonic = monotonic
def apply_poisson_noise(self,keys=False):
temp = deepcopy(self)
if keys != False:
for key in keys:
temp[key] = np.random.poisson(self[key])
temp = AbundanceFrame(self.index, columns=self.columns, data = temp.values,
steps=self.steps, monotonic=self.monotonic)
else:
temp = AbundanceFrame(self.index, columns=self.columns, data = self.apply(np.random.poisson),
steps=self.steps, monotonic=self.monotonic)
return temp