使用pandas DataFrame初始化一个类并填充它。
使用pandas DataFrame初始化一个类并填充它。
我正在尝试创建一个继承pandas DataFrame的类,并进行一些修改。然而,它并没有按预期工作。
import pandas as pd class result(pd.DataFrame): def __init__(self, x): pd.DataFrame.__init__(self) j = pd.DataFrame({'a': x}) print(x) print(j) self.append(j)
结果是:
>>> k = result([2,4]) [2, 4] a 0 2 1 4 >>> print(k) Empty result Columns: [] Index: []
如你所见,返回的值没有被`j`附加上。为了比较,观察当`j`和`k`不在类内定义时的情况:
>>> k = pd.DataFrame() >>> j = pd.DataFrame({'a': [2,4]}) >>> print(k.append(j)) a 0 2 1 4
是什么导致了这种差异?如果我想要将参数`x`附加到`j`中,我应该在`result`内写什么呢?
非常感谢!
问题的原因是append
不会就地发生,所以您必须存储输出结果。您可以在这里找到一个示例。
在这种情况下,您可以这样做:
import pandas as pd class Result: def __init__(self): self.main_dataframe = pd.DataFrame(data=None, columns=['a']) def append_dataset(self, x): temp_dataframe = pd.DataFrame(data=x, columns=['a']) self.main_dataframe = self.main_dataframe.append(temp_dataframe) def debug(self): print(self.main_dataframe) # a # 0 2 # 1 4 if __name__ == "__main__": k = Result() k.append_dataset(x=[2, 4]) k.debug()
如何继承Pandas类
更多信息请参见Inheriting Pandas
import pandas as pd class Result(pd.DataFrame): def _constructor(self): return Result if __name__ == "__main__": k = Result(data=[2, 4], columns=['a']) tem_data = pd.DataFrame(data=[5, 6], columns=['a']) k = k.append(tem_data) print(k)
谢谢。有没有办法保持继承结构?即使是Result从pd.DataFrame继承的?
是的,可以。我已经更新了我的答案。希望对您有所帮助。您可以在pandas.pydata.org/pandas-docs/stable/…上找到更多信息。
如果帖子回答了您的问题,请将其接受为解决方案。
我想我已经接受了。