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)
为什么不与星号一起使用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 文档:
返回表示当前全局符号表的字典。这始终是当前模块的字典(在函数或方法内,这是定义它的模块,而不是调用它的模块)。