Класс Python, полученный из DataFrame от pandas с атрибутом list / DataFrame

1

Я пытаюсь создать класс, полученный из pandas DataFrame. Класс должен иметь атрибут типа string, DataFrame и list. Нет никакой проблемы с атрибутом string, но DataFrame и list каждого вызывают предупреждение. Несмотря на предупреждения, код, кажется, ведет себя правильно.

Может ли кто-нибудь помочь мне исправить свой код? Или подавить предупреждения?

Код:

import pandas as pd

class MyClass(pd.DataFrame):
    def __init__(self, arg_string, arg_dataframe, *arg_params):
        pd.DataFrame.__init__(self)
        self._string    = arg_string
        self._dataframe = arg_dataframe
        self._params    = arg_params

if __name__=='__main__':
    df = pd.DataFrame()
    c1 = MyClass("test", df, 1, 2, 3)

    print(c1._string)
    print(c1._dataframe)
    print(c1._params)

Предупреждающее сообщение:

so_example.py:7: UserWarning: Pandas doesn't allow columns to be created via a new attribu
te name - see https://pandas.pydata.org/pandas-docs/stable/indexing.html#attribute-access
  self._dataframe = arg_dataframe

so_example.py:8: UserWarning: Pandas doesn't allow columns to be created via a new attribu
te name - see https://pandas.pydata.org/pandas-docs/stable/indexing.html#attribute-access
  self._params    = arg_params

Stdout:

test
Empty DataFrame
Columns: []
Index: []
(1, 2, 3)
Теги:
pandas
oop

1 ответ

2
Лучший ответ

Вы пытаетесь подклассифицировать фрейм данных.

Я ответил, как подкласс здесь → LINK


Почему атрибут фрейма данных является еще одним фреймворком данных? Если вы хотите, чтобы объект имел несколько атрибутов, один из которых является фреймворком данных, это прекрасно. Просто не определяйте класс как class MyClass(pd.DataFrame): но class MyClass(object): вместо этого.

  • 0
    Спасибо, я думаю, что ссылка очень поможет. Я хочу объект, который ведет себя как фрейм данных и имеет закрытые члены, некоторые из которых снова являются фреймами данных (или подклассами фрейма данных). Это концептуально плохой стиль?
  • 0
    Вероятно. Но я думаю, что вы можете выполнить свою задачу, если передадите имя своих атрибутов в переменную класса _metadata .

Ещё вопросы

Сообщество Overcoder
Наверх
Меню