我有一個excel檔案,我把它作為引數檔案,我在一個資料框架中檢索資料
我遍歷引數檔案(并將引數存盤在圖元串列中)和資料框架,以便在適當的時候應用函式,但由于函式是通過其名稱存盤在引數檔案中的,而該名稱是一個字串,因此無法作業。我嘗試使用eval,但它回傳None
。
def Patient(pat_ide)。
return '0' str(pat_ide[4: ] )
def Sex(code)。
if code == 1:
return 'M': return 'M'
else:
return 'F: return 'F
#從excel檔案中提取引數 #從excel檔案中提取引數
sdtm = [
('STUDYID','01-COV',None,None)。
('DOMAIN','DM',None,None)。
('USUBJID',None,'pat_ide',None)。
('SUBJID',None,'pat_ide','Patient'), ***病人功能BUT STRING ***
('SEX',None,'Dem_sex','Sex') ***性功能BUT STRING ***
]
for v in sdtm:
for index, row in df.iterrows() 。
# if assigned valueif v[1] !='NULL':
df.loc[index, v[0] ] = v[1]
# else retrieve value from raw data[/span>]
else:
if v[3] != 'NULL':
df. loc[index, v[0]] = eval('%s(%s)'%(v[3] 。 行[v[2]]) *** return None *** ***
else:
df.loc[index, v[0]] = row[v[2] ]
uj5u.com熱心網友回復:
你可以使用像這樣的東西:
class Functions()。
def __init__(self):
pass
def alpha(self, a)。
return a*2: return a*2
obj = Functions()
call_this_function = getattr(obj, 'alpha')
print(call_this_function(2)
uj5u.com熱心網友回復:
你可以使用vars()從本地命名空間獲取物件。這將回傳所有定義的物件的字典,包括函式,例如:
>>> vars()
{'__builtins__': <模塊'__builtin__'(build-in)>, '__name__': '__main__', 'Patient': <function Patient at 0x1007e52d0> , '__doc__': None, '__package__': None}。
你可以通過名字獲得你的Patient函式,使用
fn = vars()['Patient'] # get the function。
fn() # 呼叫該函式。
在你的代碼中,這將成為.
def Patient(pat_ide)。
return '0' str(pat_ide[4: ] )
def Sex(code)。
if code == 1:
return 'M': return 'M'
else:
return 'F: return 'F
#從excel檔案中提取引數 #從excel檔案中提取引數
sdtm = [
('STUDYID','01-COV',None,None)。
('DOMAIN','DM',None,None)。
('USUBJID',None,'pat_ide',None)。
('SUBJID',None,'pat_ide','Patient'), ***病人功能BUT STRING ***
('SEX',None,'Dem_sex','Sex') ***性功能BUT STRING ***
]
for v in sdtm:
for index, row in df.iterrows() 。
# if assigned valueif v[1] !='NULL':
df.loc[index, v[0] ] = v[1]
# else retrieve value from raw data[/span>]
else:
if v[3] != 'NULL':
fn_name = v[3] # 獲取函式的名稱。
fn = vars()[fn_name] # 獲取函式。
fn_arg = row[v[2] ]
df.loc[index, v[0]] = fn(fn_arg) # Call the function.
else:
df.loc[index, v[0]] = row[v[2] ]
但是注意,你實際上不需要這樣做。既然你的函式name來自于你的串列,為什么不直接把函式存盤在里面呢,例如:
。
def Patient(pat_ide)。
return '0' str(pat_ide[4: ] )
def Sex(code)。
if code == 1:
return 'M': return 'M'
else:
return 'F: return 'F
#從excel檔案中提取引數 #從excel檔案中提取引數
sdtm = [
('STUDYID','01-COV',None,None)。
('DOMAIN','DM',None,None)。
('USUBJID',None,'pat_ide',None)。
('SUBJID',None,'pat_ide',Patient), ***病人功能
('SEX',None,'dem_sex',Sex) *** Sex功能
for v in sdtm:
for index, row in df.iterrows() 。
# if assigned valueif v[1] !='NULL':
df.loc[index, v[0] ] = v[1]
# else retrieve value from raw data[/span>]
else:
if v[3] != 'NULL':
fn = v[3] # Get the FUNCTION 2] ]
df.loc[index, v[0]] = fn(fn_arg) #呼叫函式。
else:
df.loc[index, v[0]] = row[v[2] ]
在Python中,你可以在串列中存盤函式。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/326630.html
標籤:
