返回数据框作为类方法

时间:2019-03-30 14:56:46

标签: python class dataframe

我想在创建对象时创建属于数据框的报表对象。该代码旨在读取文件并在实例化和调用load方法的一部分中进行一些过滤

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提及或在Report()调用中定义的颜色和年份字段的数据框。任何想法都将不胜感激

1 个答案:

答案 0 :(得分:1)

如果您的目标是将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