使用pandas DataFrame初始化一个类并填充它。

6 浏览
0 Comments

使用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`内写什么呢?

非常感谢!

0
0 Comments

问题的原因是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/…上找到更多信息。

如果帖子回答了您的问题,请将其接受为解决方案。

我想我已经接受了。

0