【发布时间】:2019-02-26 15:19:45
【问题描述】:
大家好 Stackoverflow,... 我希望这个问题还没有得到回答。 经过半天的谷歌搜索后,我确实辞职在这里问一个问题。 我的问题如下:
我想创建一个类来获取一些信息并处理这些信息:
#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 方法有问题,我想在实例化类时默认运行下面的类方法,但不知何故我无法让它工作。我在这里看到了其他几个帖子,例如 [Calling a class function inside of __init__ [1]:Python 3: Calling a class function inside of __init__ 但我仍然无法做到。第一个问题对我有用,但我想在构造函数运行后调用实例变量。
我试过这个:
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() 那样重复每个实例,而是希望直接调用它。
【问题讨论】:
-
self.getDF(...) -
顺便说一句,
raw_data.getDF可以简化为return pd.DataFrame.from_dict(dict(enumerate(self.parse(filename))))或(我认为)return pd.DataFrame.from_records(enumerate(self.parse(filename)))。 -
另外,
parse和getDF都不需要是你的类的方法;它们可以定义为类外的常规函数,或者,如果您真的想将它们保留在类的命名空间中,则可以将它们设为静态方法。
标签: python pandas initialization init