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

Tim*_*Mak 4 python class pandas

我正在尝试创建一个继承 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)
Run Code Online (Sandbox Code Playgroud)

结果:

>>> k = result([2,4])
[2, 4]
   a
0  2
1  4
>>> print(k)
Empty result
Columns: []
Index: []
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,不知何故,返回值没有附加j. 为了进行比较,请观察何时jk未在类中定义:

>>> k = pd.DataFrame()
>>> j = pd.DataFrame({'a': [2,4]})
>>> print(k.append(j))
   a
0  2
1  4
Run Code Online (Sandbox Code Playgroud)

是什么导致了这种差异?result如果我想将参数x附加到 中,我应该在其中写什么j

提前谢谢了!

Ayb*_*ars 5

原因是这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()
Run Code Online (Sandbox Code Playgroud)

如何继承 Pandas 类 更多信息请参见此处Inheriting Pandas

import pandas as pd

class Result(pd.DataFrame):

  @property
  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)
Run Code Online (Sandbox Code Playgroud)