【问题标题】:Initializing a class with a pandas DataFrame and filling it用 pandas DataFrame 初始化一个类并填充它
【发布时间】:2019-05-08 22:36:50
【问题描述】:

我正在尝试创建一个继承 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 没有附加返回值。为了比较,观察 jk 何时未在类中定义:

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

造成这种差异的原因是什么?如果我想将参数x 附加到j 中,我应该在result 中写什么?

非常感谢!

【问题讨论】:

  • 这里的k值应该是多少?
  • 它应该是一个 pd.DataFrame,a = [2,4]。
  • 请编辑问题并以正确的格式提供预期的输出

标签: python pandas class


【解决方案1】:

原因是append 不会就地发生,因此您必须存储输出。你可以在这里找到一个例子enter link description here 对于这种情况,您可以这样做:

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):

  @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)

【讨论】:

  • 谢谢@Aybars。有没有办法保持继承结构?即 Result 继承自 pd.DataFrame?
  • @TimMak,是的,你可以。我已经更新了我的答案。我希望它会有所帮助。您可以在pandas.pydata.org/pandas-docs/stable/… 找到有关它的更多信息
  • @TimMak,如果帖子回答了您的问题,请接受它作为解决方案。
  • 我想我有。
猜你喜欢
  • 2016-12-03
  • 1970-01-01
  • 2022-12-22
  • 2012-11-26
  • 2014-09-25
  • 2021-10-13
  • 1970-01-01
  • 2019-04-26
相关资源
最近更新 更多