我可以使用抽象方法来导入 (Python) 熊猫数据的特定于文件的格式吗?

d8a*_*nja 6 python format methods python-module pandas

我有一个类FileSet有方法_process_series,它包含了一堆if-elif做块filetag的不同特异性格式pandas.Series

    elif filetag == "EntityA":
        ps[filetag+"_Id"] = str(ps[filetag+"_Id"]).strip()
        ps[filetag+"_DateOfBirth"] = str(pd.to_datetime(ps[filetag+"_DateOfBirth"]).strftime('%Y-%m-%d')).strip()
        ps[filetag+"_FirstName"] = str(ps[filetag+"_FirstName"]).strip().capitalize()
        ps[filetag+"_LastName"] = str(ps[filetag+"_LastName"]).strip().capitalize()
        ps[filetag+"_Age"] = relativedelta(datetime.today(), datetime.strptime(ps[filetag+"_DateOfBirth"], "%Y-%m-%d")).years
        return ps
Run Code Online (Sandbox Code Playgroud)

我想在类中定义一个抽象format方法,并将这些格式块保存在单独的模块中,这些模块在_process_series为给定的filetag. 原谅伪代码,但类似于:

for tag in filetag:
    from my_formatters import tag+'_formatter' as fmt
    ps = self.format(pandas_series, fmt)
    return ps
Run Code Online (Sandbox Code Playgroud)

该模块将包含格式化块:

# my_formatters.EntityA_formatter
    ps[filetag+"_Id"] = str(ps[filetag+"_Id"]).strip()
    ps[filetag+"_DateOfBirth"] = str(pd.to_datetime(ps[filetag+"_DateOfBirth"]).strftime('%Y-%m-%d')).strip()
    ps[filetag+"_FirstName"] = str(ps[filetag+"_FirstName"]).strip().capitalize()
    ps[filetag+"_LastName"] = str(ps[filetag+"_LastName"]).strip().capitalize()
    ps[filetag+"_Age"] = relativedelta(datetime.today(), datetime.strptime(ps[filetag+"_DateOfBirth"], "%Y-%m-%d")).years
    return ps
Run Code Online (Sandbox Code Playgroud)

U10*_*ard 1

为什么不与星号一起使用globals

from my_formatters import *

for tag in filetag:
    fmt = globals()[tag + '_formatter']
    ps = self.format(pandas_series, fmt)
    return ps
Run Code Online (Sandbox Code Playgroud)

我将你的伪代码转换为真实代码。

globals 文档

返回表示当前全局符号表的字典。这始终是当前模块的字典(在函数或方法内,这是定义它的模块,而不是调用它的模块)。