簡體   English   中英

如何將大量參數傳遞給** kwargs

[英]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}

如果您使用的是 ,則^僅對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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM