[英]How to pass large number arguments to **kwargs
我有以下數據框:
p p_loc s s0 s0_loc s1 s1_loc s2 s2_loc s3 s3_loc
0 ABCD M AB,AC,AD AB A AC M AD Q NaN U
1 PQRS N PQ,PR,PS,QR PQ B PR N PS R QR V
我使用,將s列拆分為s0,s1,s2,s3列。 我想將值從s0,s1,s2,s3,s4,s5,s0_loc,s1_loc,s2_loc,s3_loc傳遞給以下函數,該函數接受以下參數:
def func(p,p_loc,**args):
print(p)
print(p_loc)
print(kwargs)
我傳遞參數如下:
df['new'] = df.apply(lambda x: func(df['p'],df['p_loc'],df['s0'],df['s1'],df['s2'],df['s3'],df['s0_loc'],df['s1_loc'],df['s2_loc'],df['s3_loc']))
我想知道有沒有更簡單的方法來傳遞這些參數(說,假設我的column s拆分結果超過15到20列。我如何以一種更簡單的方式傳遞這些參數)... ???
提前致謝...
創建一set
位置參數,例如:
>>> not_kwargs = {'p', 'p_loc', 's'}
接下來過濾掉類似kwargs的東西:
>>> data = df.to_dict()
>>> kwargs = {key:data[key] for key in data.keys() ^ not_kwargs}
如果您使用的是python-2.7 ,則^
僅對set
。
>>> kwargs = {key:data[key] for key in set(data.keys()) ^ not_kwargs}
通話功能:
>>> func(data['p'], data['p_loc'], **kwargs)
不確定這是否是您想要的,但是您可以將所需的列放在單獨的列表中,並在需要時生成參數。
def func(p, p_loc, *args):
print(p)
print(p_loc)
print(args)
list_of_cols = ['s0', 's1', 's2', 's3', 's0_loc', 's1_loc', 's2_loc','s3_loc']
df['new'] = df.apply(lambda x: func(df['p'], df['p_loc'], *[df[col] for col in list_of_cols]))
這是您要找的東西嗎?
您可以像這樣將字典傳遞給kwargs:
d = {
'p': df['p'],
'p_loc': df['p_loc'],
's0': df['s0'],
's1': df['s1'],
...
}
def func(**kwargs):
print(kwargs)
func(**d)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.