簡體   English   中英

python - 如何在python pandas管道中將函數作為參數傳遞給參數

[英]How can I pass function as argument with parameter in python pandas pipe

我想制作一些使用熊貓管道的功能。
像這樣

import pandas as pd

def foo(df):
   df['A'] = 1
   return df

def goo(df):
   df['B'] = 2
   return df

def hoo(df, arg1):
   df[arg1] = 3
   return df


df = pd.DataFrame.from_dict({"A":[1, 2, 3],
                            "B":[4, 5, 6]})
print(df)

(df.pipe(foo)
  .pipe(goo)
  .pipe(hoo, arg1='Hello')
)

print(df)

第一張印刷品是

   A  B
0  1  4
1  2  5
2  3  6

第二個點是

   A  B  Hello
0  1  2      3
1  1  2      3
2  1  2      3

這是無意義的代碼,易於理解。

函數 sch 有許多組合,如 foo、goo、hoo。 我需要抽象這個管道代碼。

import pandas as pd

def foo(df):
    df['A'] += 1
    return df

def goo(df):
    df['B'] += 2
    return df

def hoo(df, arg1):
    df[arg1] = 3
    return df


def pipe_line(df, func_list, kargs_list):
    for func, kargs in zip(func_list, kargs_list):
        df = func(df, **kargs)
    return df

df = pd.DataFrame.from_dict({"A":[1, 2, 3],
                             "B":[4, 5, 6]})

df = pipe_line(df, 
    [foo, goo, hoo], 
    [{}, {}, dict(arg1="HELLO")])

print(df)

但是, pipe_line函數非常難看。 如何升級此功能的可讀性?

pipe_line根本不需要太多:只需重復將函數應用於先前函數的返回值,直到函數用完。

def pipe_line(df, fs):
    for f in fs:
       df = f(df)
    return df

訣竅是定義適當的函數,它們都采用單個數據幀參數。 functools.partial對此有所幫助。

from functools import partial


df = pipeline(df, [foo, goo, partial(hoo, arg1="HELLO")])

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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