运行并返回Python类构造函数中类函数的值
大家好,。。。 我希望这个问题还没有得到回答。 在谷歌搜索了半天之后,我真的忍不住在这里问了一个问题。 我的问题如下: 我想创建一个类,它获取一些信息并处理这些信息:运行并返回Python类构造函数中类函数的值,python,pandas,initialization,init,Python,Pandas,Initialization,Init,大家好,。。。 我希望这个问题还没有得到回答。 在谷歌搜索了半天之后,我真的忍不住在这里问了一个问题。 我的问题如下: 我想创建一个类,它获取一些信息并处理这些信息: #Klassendefinition für eine Instanz von Rohdaten class raw_data(): def __init__(self, filename_rawdata, filename_metadata, file_format, pa
#Klassendefinition für eine Instanz von Rohdaten
class raw_data():
def __init__(self, filename_rawdata, filename_metadata,
file_format, path, category, df_raw, df_meta):
self.filename_rawdata = filename_rawdata
self.filename_metadata = filename_metadata
self.file_format = file_format
self.path = path
self.category = category
self.df_raw = getDF(self.filename_rawdata)
self.df_meta = getDF(self.filename_metadata)
# generator
def parse(self, path):
g = gzip.open(path, 'rb')
for l in g:
yield eval(l)
# function that returns a pandas dataframe with the data
def getDF(self, filename):
i = 0
df = {}
for d in self.parse(filename):
df[i] = d
i += 1
return pd.DataFrame.from_dict(df, orient='index')
现在我对init方法有一个问题,我希望在实例化类时,在默认情况下运行下面的class方法,但是我无法设法使其正常工作。我在这里看到过其他一些帖子,比如[[1]:
第一个问题对我来说确实有效,但我想在构造函数运行后调用实例变量
我试过这个:
class raw_data():
def __init__(self, filename_rawdata, filename_metadata,
file_format, path, category):
self.filename_rawdata = filename_rawdata
self.filename_metadata = filename_metadata
self.file_format = file_format
self.path = path
self.category = category
getDF(self.filename_rawdata)
getDF(self.filename_metadata)
# generator
def parse(self, path):
g = gzip.open(path, 'rb')
for l in g:
yield eval(l)
# function that returns a pandas dataframe with the data
def getDF(self, filename):
i = 0
df = {}
for d in self.parse(filename):
df[i] = d
i += 1
return pd.DataFrame.from_dict(df, orient='index')
但是我得到一个错误,因为没有定义getDF(显然)。。
我希望这个问题无论如何都不是愚蠢的。我需要这样做,因为之后我想运行50-60个实例调用,我不想重复instance.getDF()…对于每个实例,但更希望直接调用它。您所需要的就是像任何其他方法一样调用
getDF
,使用self
作为应该调用它的对象
self.df_raw = self.getDF(self.filename_rawdata)
也就是说,这个类可以通过使其成为数据类而大大简化
from dataclasses import dataclass
@dataclass
class RawData:
filename_rawdata: str
filename_metadata: str
path: str
category: str
def __post_init__(self):
self.df_raw = self.getDF(self.filename_rawdata)
self.df_meta = self.getDF(self.filename_metadata)
@staticmethod
def parse(path):
with gzip.open(path, 'rb') as g:
yield from map(eval, g)
@staticmethod
def getDF(filename):
return pd.DataFrame.from_records(enumerate(RawData.parse(filename)))
自动生成的
\uuuuuu init\uuuuu
方法将为您设置四个已定义的属性。\uuuuuu post\u init\uuuuu
将在\uuuuuuu init\uuuuuuuuu
之后调用\uuuuuuuuuuuuuuuuuuuuuuuuuu init
,使您有机会对两个给定的文件名调用getDF
作为旁白,raw\u data.getDF
可以简化为return pd.DataFrame.from\u dict(dict(enumerate(self.parse(filename))
或(我认为)return pd.DataFrame.from\u记录(enumerate(self.parse(filename)))
。此外,无论是parse
还是getDF
都不需要是类的方法;它们可以定义为类外的常规函数,或者,如果您真的想将它们保留在类的命名空间中,则可以被定义为静态方法。啊,见鬼,我确实查看了代码x次,但不知何故没有发现我缺少“.self”函数之前:-(很抱歉我这么做很愚蠢。以前从未听说过这个“数据类”,这让我大开眼界,非常感谢!!