Инициализация класса с пандой DataFrame и заполнение его - PullRequest
0 голосов
/ 07 декабря 2018

Я пытаюсь создать класс, который наследует панду 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

Что вызывает разницу?Что я должен написать в result, если я хочу, чтобы аргументы x были добавлены в j?

Большое спасибо заранее!

1 Ответ

0 голосов
/ 07 декабря 2018

Причина в том, что 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()

Как наследовать класс Панд Подробнееинформация здесь Наследование панд

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...