Создание класса на основе Pandas.DataFrame с использованием функции pandas.read_csv () для инициализации - PullRequest
0 голосов
/ 29 ноября 2018

Моя цель - создать объект, который ведет себя так же, как Pandas DataFrame, но с несколькими дополнительными моими собственными методами поверх него.Насколько я понимаю, одним из подходов было бы расширение класса, который я сначала попытался сделать следующим образом:

class CustomDF(pd.DataFrame):
    def  __init__(self, filename):
        self = pd.read_csv(filename)

Но я получаю ошибки при попытке просмотра этого объекта, говоря: 'CustomDF' object has no attribute '_data'.

Моя вторая итерация заключалась в том, чтобы вместо этого не наследовать объект, а импортировать его в виде DataFrame в один из атрибутов объекта и иметь методы для его обхода, например:

class CustomDF():

    def  __init__(self, filename):
        self.df = pd.read_csv(filename)

    def custom_method_1(self,a,b,...):
        ...

    def custom_method_2(self,a,b,...):
        ...

Это нормально, за исключением того, что для всех пользовательских методов мне сначала нужно получить доступ к атрибуту self.df, чтобы что-то с ним сделать, но я бы предпочел, чтобы мой пользовательский кадр данных был просто self.

Есть лиспособ, которым это может быть сделано?Или этот подход не идеален в любом случае?

Ответы [ 2 ]

0 голосов
/ 29 ноября 2018

Я бы, наверное, пошел с шаблоном декоратора здесь.Принятый ответ для этого поста поставит вас на правильный путь.

Я вижу, что ваша первая итерация была бы действительно крутой, но мне кажется, вам нужнознать довольно много вещей о внутренностях Pandas, например, что этот атрибут _data должен быть установлен определенным образом.

Cheers.

0 голосов
/ 29 ноября 2018

Метод __init__ переписан в вашем первом примере.

Используйте super, а затем добавьте свой код

class CustomDF(pd.DataFrame):
    def __init__(self, *args, **kw):
        <b>super(CustomDF, self).__init__(*args, **kw)</b>
        # Your code here

    def custom_method_1(self,a,b,...):
        ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...