Вернуть фрейм данных как метод класса - PullRequest
1 голос
/ 30 марта 2019

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

class Report:
    def __init__(self,c = ['red','green','blue'],y = [2015,2016,2017,2018,2019]):
        self.color = c
        self.years = y

    def load(self):
        df = pd.read_excel(r"C:\Users\ger\Desktop\sample.xlsx",sheet_name='sht1')
        df = df.loc[(df['color'].isin(self.color) & 
                     df['year'].isin(self.years)),:]
        return df

# none of these below seems to work though
r1 = Report().load()

# or
r1 = Report()
r1 = r1.load()

Ожидаемым результатом будет кадр данных с полями цвета и года, как указано в init или как определено вСообщить () вызов.Любые мысли с благодарностью

1 Ответ

1 голос
/ 30 марта 2019

Если ваша цель - использовать load в качестве фактического метода класса, вот пример того, как это работает в вашем случае:

import pandas as pd

class Report:
    def __init__(self, c=['red', 'green', 'blue'], y=[2017, 2018, 2019]):
        self.color = c
        self.years = y

    @classmethod
    def load(cls, self):
        df = pd.DataFrame(
            {'color': ['red', 'blue', 'green', 'yellow', 'purple'],
             'year': [2015, 2016, 2017, 2018, 2019]}
        )
        df = df.loc[df['color'].isin(self.color) & df['year'].isin(self.years)]
        self.df = df

В действии:

>>> report = Report()
>>> Report.load(report)
>>> print(report.df)
   color  year
2  green  2017
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...