我想在创建对象时创建属于数据框的报表对象。该代码旨在读取文件并在实例化和调用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()调用中定义的颜色和年份字段的数据框。任何想法都将不胜感激
答案 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