#python #class #dataframe
#python #класс #фрейм данных
Вопрос:
Я хотел бы создать объекты отчета, которые являются фреймами данных при создании объекта. код предназначен для чтения файла и выполнения некоторой фильтрации как части создания экземпляра и вызова метода 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:UsersgerDesktopsample.xlsx",sheet_name='sht1')
df = df.loc[(df['color'].isin(self.color) amp;
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. можете ли вы поделиться образцом вашего файла Excel? Код работает для меня, если я использую фиктивный фрейм данных
2. @venky__: в файле Excel, который я использовал, была некоторая проблема с ним. Я использовал новый файл, и код сработал. Спасибо!
Ответ №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) amp; df['year'].isin(self.years)]
self.df = df
В действии:
>>> report = Report()
>>> Report.load(report)
>>> print(report.df)
color year
2 green 2017